简单线性回归学习
2018-04-03 11:15
441 查看
简单线性回归
![这里写图片描述](https://img-blog.csdn.net/20180403111119874?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva3Q1MTMyMjY3MjQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
原始数据特征: (20,) 训练数据特征: (16,) 测试数据特征: (4,)
原始数据标签: (20,) 训练数据标签: (16,) 测试数据标签: (4,)
![这里写图片描述](https://img-blog.csdn.net/20180403111203333?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva3Q1MTMyMjY3MjQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
最佳拟合线:截距a= 6.598073034376128 回归系数b= [16.69370762]
![这里写图片描述](https://img-blog.csdn.net/20180403111222998?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva3Q1MTMyMjY3MjQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
相关系数矩阵:
from collections import OrderedDict import pandas as pd
#数据集 examDict={ '学习时间':[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25, 2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50], '分数': [10, 22, 13, 43, 20, 22, 33, 50, 62, 48, 55, 75, 62, 73, 81, 76, 64, 82, 90, 93] } examOrderDict=OrderedDict(examDict) examDf=pd.DataFrame(examOrderDict)
examDf.head()
学习时间 | 分数 | |
---|---|---|
0 | 0.50 | 10 |
1 | 0.75 | 22 |
2 | 1.00 | 13 |
3 | 1.25 | 43 |
4 | 1.50 | 20 |
#提取特征和标签 #特征features exam_X=examDf.loc[:,'学习时间'] #标签labes exam_Y=examDf.loc[:,'分数']
#绘制散点图 import matplotlib.pyplot as plt plt.scatter(exam_X,exam_Y,color='b',label='exam data') plt.xlabel('Hours') plt.ylabel('Score') plt.show()
![这里写图片描述](https://img-blog.csdn.net/20180403111119874?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva3Q1MTMyMjY3MjQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
''' train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取训数据 第一个参数:样本特征 第二个参数:样本标签 train_size:训练数据占比,整数的话就是样本数量 ''' from sklearn.cross_validation import train_test_split #建立训练数据和测试数据 X_train,X_test,Y_train,Y_test=train_test_split(exam_X,exam_Y,train_size=.8) #输出数据大小 print('原始数据特征:',exam_X.shape, '训练数据特征:',X_train.shape, '测试数据特征:',X_test.shape) print('原始数据标签:',exam_Y.shape, '训练数据标签:',Y_train.shape, '测试数据标签:',Y_test.shape)
原始数据特征: (20,) 训练数据特征: (16,) 测试数据特征: (4,)
原始数据标签: (20,) 训练数据标签: (16,) 测试数据标签: (4,)
#绘图 plt.scatter(X_train,Y_train,color='b',label='train data') plt.scatter(X_test,Y_test,color='r',label='test data') plt.legend(loc=0) plt.xlabel('Hours') plt.ylabel('Score') plt.show()
![这里写图片描述](https://img-blog.csdn.net/20180403111203333?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva3Q1MTMyMjY3MjQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
#第一步:导入线性回归 from sklearn.linear_model import LinearRegression #第二步:创建线性回归模型 model=LinearRegression() ''' 这里如果直接model.fit(X_train,Y_train)进行训练会报错 由于sklearn要求输入的特征必须是二维数组类型,所以我们需要将特征增加一个维度 在这里根据报错信息使用X_train[:,np.newaxis]和X_train[:,np.newaxis]增加维度的效果一样 ''' import numpy as np X_train=X_train[:,np.newaxis] X_test=X_test[:,np.newaxis] #第三步:训练模型 model.fit(X_train,Y_train)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
''' 最佳拟合线:z=a+bx 截距intercept:a 回归系数:b ''' #截距 a=model.intercept_ #回归系数 b=model.coef_ print('最佳拟合线:截距a=',a,' 回归系数b=',b)
最佳拟合线:截距a= 6.598073034376128 回归系数b= [16.69370762]
plt.scatter(X_train,Y_train,color='b',label='train data') #训练数据预测值 Y_train_pred=model.predict(X_train) #绘制拟合曲线 plt.plot(X_train,Y_train_pred,color='k',linewidth=3,label='best line') plt.legend(loc=0) plt.xlabel('Hours') plt.ylabel('Score') plt.show()
![这里写图片描述](https://img-blog.csdn.net/20180403111222998?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva3Q1MTMyMjY3MjQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
#相关系数:corr返回结果是一个数据框,存放的是相关系数矩阵 rDf=examDf.corr() print('相关系数矩阵:') rDf
相关系数矩阵:
学习时间 | 分数 | |
---|---|---|
学习时间 | 1.000000 | 0.923985 |
分数 | 0.923985 | 1.000000 |
#方差可以作为评估模型好坏的标志,越接近1,模型越好 model.score(X_test,Y_test)
0.807690002635284
#训练数据散点图 plt.scatter(X_train, Y_train, color='b', label="train data") #训练数据的预测值 Y_train_pred = model.predict(X_train) #绘制最佳拟合线:标签用的是训练数据的预测值y_train_pred plt.plot(X_train, Y_train_pred, color='k', linewidth=3, label="best line") #测试数据散点图 plt.scatter(X_test, Y_test, color='r', label="test data") #添加图标标签 plt.legend(loc=2) plt.xlabel("Hours") plt.ylabel("Score") #显示图像 plt.show()
相关文章推荐
- 2.1 线性回归算法学习——简单线性回归算法的原理及推导过程
- 使用Eviews做简单线性回归
- 简单线性回归
- 机器学习入门学习笔记:(2.1)线性回归理论推导
- 对线性回归、逻辑回归、各种回归的概念学习
- 对线性回归、逻辑回归、各种回归的概念学习
- 简单线性回归
- 简单线性回归
- 2.10 线性回归算法学习——回归模型的可解释性
- 对线性回归、逻辑回归、各种回归的概念学习
- 深度学习1-线性回归,逻辑回归
- 从线性回归到无监督学习,数据科学家需要掌握的十大统计技术
- 对线性回归、逻辑回归、各种回归的概念学习
- R语言中Gibbs抽样的Bayesian简单线性回归
- 对数线性模型之一(逻辑回归), 广义线性模型学习总结
- 线性回归学习数字加法
- 简单线性回归的随机梯度下降算法实现:Linear Regression - SGD
- 对数线性模型之一(逻辑回归), 广义线性模型学习总结(转)
- 对线性回归、逻辑回归、各种回归的概念学习
- 机器学习--线性回归、逻辑回归