只用 1 个特征实例
# coding:utf-8
# coding: utf-8
# 利用 diabetes数据集来学习线性回归
# diabetes 是一个关于糖尿病的数据集, 该数据集包括442个病人的生理数据及一年以后的病情发展情况。
# 数据集中的特征值总共10项, 如下:
# 年龄
# 性别
#体质指数
#血压
#s1,s2,s3,s4,s4,s6 (六种血清的化验数据)
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets,linear_model
from sklearn.metrics import mean_squared_error,r2_score
# Linear Regression Example
# 加载数据集
diabetes = datasets.load_diabetes()
# 我们只使用一个特证
diabetes_X = diabetes.data[:,np.newaxis,2]
# print(diabetes.data.shape ) (442,10)
# print(np.sum(diabetes.data[:,0]**2)) # 经过标准化的
# 划分数据集
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
# 标签
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]
# 创建线性回归模型
regr = linear_model.LinearRegression()
regr.fit(diabetes_X_train,diabetes_y_train)
# 使用训练集做预测
diabetes_y_pred = regr.predict(diabetes_X_test)
# 回归系数
print('Coefficients : \n',regr.coef_)
# 均方误差
print('Mean squared error :%.2f' % mean_squared_error(diabetes_y_test,diabetes_y_pred))
# 方差
print('Variance score :%.2f' % r2_score(diabetes_y_test,diabetes_y_pred))
# 画出图像
plt.scatter(diabetes_X_test,diabetes_y_test,color='black')
plt.plot(diabetes_X_test,diabetes_y_pred,color='blue',linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()
十个特征分别进行预测
from sklearn import datasets
from sklearn import linear_model
import matplotlib.pyplot as plt
import numpy as np
diabetes = datasets.load_diabetes()
x_train = diabetes.data[:-20]
y_train = diabetes.target[:-20]
x_test = diabetes.data[-20:]
y_test = diabetes.target[-20:]
linreg = linear_model.LinearRegression()
linreg.fit(x_train,y_train)
# 训练集上求得的回归系数
print(linreg.coef_)
# 预测值
diabetes_pred = linreg.predict(x_test)
# print(diabetes_pred)
# 真实值
# print(y_test)
MSE_error = linreg.score(x_test,y_test)
plt.figure(figsize=(8,12))
for i in range(0,10):
# 取出测试集中第 i 个特征
xi_test = x_test[:,i]
xi_train = x_train[:,i]
# 将一维数组 转为 二维
xi_test = xi_test[:,np.newaxis]
xi_train = xi_train[:,np.newaxis]
plt.ylabel(u'病情数值')
linreg.fit(xi_train,y_train)
y_hat = linreg.predict(xi_test)
plt.subplot(5,2,i+1)
plt.scatter(xi_test,y_test,color='k')
plt.plot(xi_test,y_hat,color='b',linewidth=3)
plt.show()