by28777换哪了 by28777( 三 )


print('系数', clf.coef_)print('截距', clf.intercept_)print('评分函数', clf.score(X, Y))'''系数 [[ 0.62402912]]截距 [-173.70433885]评分函数 0.911831188777'''

by28777换哪了  by28777

文章插图
该直线对应的回归函数为:y = 0.62402912 * x - 173.70433885 , 则X2[1]=400这个点预测的利润值为75.9 , 而X1中成本为400元对应的真实利润是80元 , 预测是基本准确的 。
2.线性回归预测糖尿病(1).糖尿病数据集Sklearn机器学习包提供了糖尿病数据集(Diabetes Dataset) , 该数据集主要包括442行数据 , 10个特征值 , 分别是:年龄(Age)、性别(Sex)、体质指数(Body mass index)、平均血压(Average Blood Pressure)、S1~S6一年后疾病级数指标 。预测指标为Target , 它表示一年后患疾病的定量指标 。原网址的描述如图4所示:
by28777换哪了  by28777

文章插图
下面代码进行简单的调用及数据规模的测试 。
# -*- coding: utf-8 -*-# By:Eastmount CSDN 2021-07-03from sklearn import datasetsdiabetes = datasets.load_diabetes() #载入数据print(diabetes.data) #数据print(diabetes.target) #类标print('总行数: ', len(diabetes.data), len(diabetes.target))print('特征数: ', len(diabetes.data[0])) #每行数据集维数print('数据类型: ', diabetes.data.shape)print(type(diabetes.data), type(diabetes.target))
调用load_diabetes()函数载入糖尿病数据集 , 然后输出其数据data和类标target 。输出总行数442行 , 特征数共10个 , 类型为(442L, 10L) 。其输出如下所示:
[[ 0.03807591 0.05068012 0.06169621 ..., -0.00259226 0.01990842-0.01764613][-0.00188202 -0.04464164 -0.05147406 ..., -0.03949338 -0.06832974-0.09220405]...[-0.04547248 -0.04464164 -0.0730303 ..., -0.03949338 -0.004219860.00306441]][ 151. 75. 141. 206. 135. 97. 138. 63. 110. 310. 101....64. 48. 178. 104. 132. 220. 57.]总行数: 442 442特征数: 10数据类型: (442L, 10L)<type 'numpy.ndarray'> <type 'numpy.ndarray'>
(2).代码实现现在我们将糖尿病数据集划分为训练集和测试集 , 整个数据集共442行 , 我们取前422行数据用来线性回归模型训练 , 后20行数据用来预测 。其中取预测数据的代码为diabetes_x_temp[-20:] , 表示从后20行开始取值 , 直到数组结束 , 共取值20个数 。
整个数据集共10个特征值 , 为了方便可视化画图我们只获取其中一个特征进行实验 , 这也可以绘制图形 , 而真实分析中 , 通常经过降维处理再绘制图形 。这里获取第3个特征 , 对应代码为:diabetes_x_temp = diabetes.data[:, np.newaxis, 2] 。完整代码如下:
# -*- coding: utf-8 -*-# By:Eastmount CSDN 2021-07-03from sklearn import datasetsimport matplotlib.pyplot as pltfrom sklearn import linear_modelimport numpy as np#数据集划分diabetes = datasets.load_diabetes() #载入数据diabetes_x_temp = diabetes.data[:, np.newaxis, 2] #获取其中一个特征diabetes_x_train = diabetes_x_temp[:-20] #训练样本diabetes_x_test = diabetes_x_temp[-20:] #测试样本 后20行diabetes_y_train = diabetes.target[:-20] #训练标记diabetes_y_test = diabetes.target[-20:] #预测对比标记#回归训练及预测clf = linear_model.LinearRegression()clf.fit(diabetes_x_train, diabetes_y_train) #训练数据集pre = clf.predict(diabetes_x_test)#绘图plt.title(u'LinearRegression Diabetes') #标题plt.xlabel(u'Attributes') #x轴坐标plt.ylabel(u'Measure of disease') #y轴坐标plt.scatter(diabetes_x_test, diabetes_y_test, color = 'black') #散点图plt.plot(diabetes_x_test, pre, color='blue', linewidth = 2) #预测直线plt.show()
输出结果如图5所示 , 每个点表示真实的值 , 而直线表示预测的结果 。
by28777换哪了  by28777

文章插图
(3).代码优化下面代码增加了几个优化措施 , 包括增加了斜率、 截距的计算 , 可视化绘图增加了散点到线性方程的距离线 , 增加了保存图片设置像素代码等 。这些优化都更好地帮助我们分析真实的数据集 。
# -*- coding: utf-8 -*-# By:Eastmount CSDN 2021-07-03from sklearn import datasetsimport numpy as npfrom sklearn import linear_modelimport matplotlib.pyplot as plt#之一步 数据集划分d = datasets.load_diabetes() #数据 10*442x = d.datax_one = x[:,np.newaxis, 2] #获取一个特征 第3列数据y = d.target #获取的正确结果x_train = x_one[:-42] #训练集X [ 0:400]x_test = x_one[-42:] #预测集X [401:442]y_train = y[:-42] #训练集Y [ 0:400]y_test = y[-42:] #预测集Y [401:442]#第二步 线性回归实现clf = linear_model.LinearRegression()print(clf)clf.fit(x_train, y_train)pre = clf.predict(x_test)print('预测结果', pre)print('真实结果', y_test)#第三步 评价结果cost = np.mean(y_test-pre)**2 #2次方print('平方和计算:', cost)print('系数', clf.coef_)print('截距', clf.intercept_)print('方差', clf.score(x_test, y_test))#第四步 绘图plt.plot(x_test, y_test, 'k.') #散点图plt.plot(x_test, pre, 'g-') #预测回归直线#绘制点到直线距离for idx, m in enumerate(x_test):plt.plot([m, m],[y_test[idx], pre[idx]], 'r-')plt.savefig('blog12-01.png', dpi=300) #保存图片plt.show()

推荐阅读