print(__doc__)# 输出文件开头注释的内容
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets,linear_model
from sklearn.metrics import mean_squared_error,r2_score
#mean_squared_error预测值和真实值之间差的平方再求平均值。
# r^2公式就是1-(残差平方和/总体平方和)用来反映数据和模型的拟合程度
#导入diabets 糖尿病数据
'''
加载用于回归模型的数据集
这个数据集中一共有442个样本,特征向量维度为10
特征向量每个变量为实数,变化范围(-.2 ,.2)
目标输出为实数,变化范围 (25 ,346)'''
diabetes = datasets.load_diabetes()
# print(diabetes.data.shape)
# print (diabetes.data.dtype)
# print (diabetes.target.shape)
# print (diabetes.target.dtype)
#只使用一个特征
'''
为了便于画图显示
仅仅使用一维数据作为训练用的X
这里使用np.newaxis的目的是让行向量变成列向量
这样diabetes_X每一项都代表一个样
此时diabetes_X的shape是(442L, 1L)
如果代码是:diabetes_X = diabetes.data[:, 2]
则diabetes_X的shape是(442L,),是一个行向量
'''
diabetes_X = diabetes.data[:,np.newaxis,2]
'''
人工将输入数据划分为训练集和测试集
前400个样本作为训练用,后20个样本作为测试用
'''
diabetes_X_train = diabetes_X[:-20]
diabetes_X_tset = diabetes_X[-20:]
diabetes_y_train = diabetes.target[:-20]
diabetes_y_tset = diabetes.target[-20:]
# 初始化一个线性回归模型
regr = linear_model.LinearRegression()
# 基于训练数据,对线性回归模型进行训练
regr.fit(diabetes_X_train,diabetes_y_train)
diabetes_y_pred = regr.predict(diabetes_X_tset)
#w存储在其成员变量coef_中
print('Coefficients:\n',regr.coef_)
#均方误差
print('Mean squared error %.2f'% mean_squared_error(diabetes_y_tset,diabetes_y_pred))
#解释方差的分数模型在测试集上的得分,得分结果在0到1之间,数值越大,说明模型越好
print('Variance score: %.2f' % r2_score(diabetes_y_tset,diabetes_y_pred))
#plot 输出 绘制模型在测试集上的效果
plt.scatter(diabetes_X_tset,diabetes_y_tset,color = 'black')
plt.plot(diabetes_X_tset,diabetes_y_pred,color = 'blue',linewidth = 3)
'''
plt.plot(x, y, format_string, **kwargs): x为x轴数据,可为列表或数组;y同理;format_string 为控制曲线的格式字符串,
**kwargs 第二组或更多的(x, y, format_string)format_string: 由 颜色字符、风格字符和标记字符组成。
颜色字符:‘b’蓝色 ;‘#008000’RGB某颜色;‘0.8’灰度值字符串
风格字符:‘-’实线;‘--’破折线; ‘-.’点划线; ‘:’虚线 ; ‘’‘’无线条
标记字符:‘.’点标记 ‘o’ 实心圈 ‘v’倒三角 ‘^’上三角
'''
plt.xticks(()) #控制图表的刻度 调用时不带参数,则返回当前的参数值
plt.yticks(())
plt.show()
普通最小二乘法
最新推荐文章于 2024-02-18 17:23:53 发布