[机器学习与scikit-learn-29]:算法-回归-普通线性回归LinearRegression拟合线性分布数据的代码示例
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:
目录
第1章 LinearRegression类说明
第2章 LinearRegression使用的代码示例
2.1 导入库
2.2 导数数据集
2.3 分割数据集
2.4 建立模型与进行训练
2.5 MSE、MAE评估
2.6 R2评估
2.7 模型指标分析
第1章 LinearRegression类说明
- fit_intercept: y = kx + b,b就是截距,这里指定是否需要带参数。
- normalize:是否需要对数据进行中心化。
- copy_X:是否需要对X样本进行拷贝,当使用normalize时,是否需要覆盖输入样本。
线性回归的类可能是最简单的类,仅有四个参数就可以完成一个完整的算法。
并且看得出,这些参数中并没有一个是必填的,都有默认值,更没有对我们的模型有不可替代作用的超参数。
这说明,线性回归的性能,往往取决于数据本身,并没有可以调整的模型的超参数,线性回归也因此对数据有着很高的要求。
幸运的是,现实中大部分连续型变量之间,都存在着或多或少的线性联系。所以线性回归虽然简单,却很强大。
同时,sklearn中的线性回归可以处理多标签问题,只需要在fit的时候输入多维度标签就可以了。
备注:
本文的重点放在用线性模型拟合线性分布的多维度数据。
第2章 LinearRegression使用的代码示例
2.1 导入库
#1.导入库
from sklearn.linear_model import LinearRegression as LR
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.datasets import fetch_california_housing as fch #加利福尼亚房屋价值数据集
import pandas as pd
2.2 导数数据集
#2. 导入数据集
housevalue = fch() #会需要下载,大家可以提前运行试试看
X = pd.DataFrame(housevalue.data) #放入DataFrame中便于查看
y = housevalue.target
print(X.shape)
print(y.shape)print(X.head())
print(housevalue.feature_names)
X.columns = housevalue.feature_names
X.columns
"""
MedInc:该街区住户的收入中位数
HouseAge:该街区房屋使用年代的中位数
AveRooms:该街区平均的房间数目
AveBedrms:该街区平均的卧室数目
Population:街区人口
AveOccup:平均入住率
Latitude:街区的纬度
Longitude:街区的经度
"""# 打印排序后的样本标签值
plt.plot(range(len(y)) ,sorted(y) )
(20640, 8) (20640,)0 1 2 3 4 5 6 7 0 8.3252 41.0 6.984127 1.023810 322.0 2.555556 37.88 -122.23 1 8.3014 21.0 6.238137 0.971880 2401.0 2.109842 37.86 -122.22 2 7.2574 52.0 8.288136 1.073446 496.0 2.802260 37.85 -122.24 3 5.6431 52.0 5.817352 1.073059 558.0 2.547945 37.85 -122.25 4 3.8462 52.0 6.281853 1.081081 565.0 2.181467 37.85 -122.25 ['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']
房价有最低值和最高值.
2.3 分割数据集
#3. 分割数据集
Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,y,test_size=0.3,random_state=420)
for i in [Xtrain, Xtest]:i.index = range(i.shape[0])print(X.shape)
print(Xtrain.shape)
print(Xtest.shape)
(20640, 8) (14448, 8) (6192, 8)
2.4 建立模型与进行训练
#4. 建立模型并进行训练
model = LR()
model = model.fit(Xtrain, Ytrain)# 模型预测
Y_pred = model.predict(Xtest)
print("预测值:", Y_pred)# 训练好的模型参数: y = k*x + b
print("训练好的模型参数:")
print("截距b的值 :", model.intercept_)
print("特征权重系数K的值:", model.coef_)# 模型特征权重值与特征的名称组合起来
[*zip(Xtrain.columns,model.coef_)]
预测值: [1.51384887 0.46566247 2.2567733 ... 2.11885803 1.76968187 0.73219077] 训练好的模型参数: 截距b的值 : -36.25689322920384 特征权重系数K的值: [ 4.37358931e-01 1.02112683e-02 -1.07807216e-01 6.26433828e-015.21612535e-07 -3.34850965e-03 -4.13095938e-01 -4.26210954e-01]
预测值: [1.51384887 0.46566247 2.2567733 ... 2.11885803 1.76968187 0.73219077] 训练好的模型参数: 截距b的值 : -36.25689322920384 特征权重系数K的值: [ 4.37358931e-01 1.02112683e-02 -1.07807216e-01 6.26433828e-015.21612535e-07 -3.34850965e-03 -4.13095938e-01 -4.26210954e-01]
Out[26]:
[('MedInc', 0.4373589305968406),('HouseAge', 0.010211268294493916),('AveRooms', -0.1078072161731777), ('AveBedrms', 0.6264338275363787),('Population', 5.216125353122233e-07),('AveOccup', -0.003348509646333547),('Latitude', -0.41309593789477145),('Longitude', -0.4262109536208467)]
备注:影响房价的主要因素为:
('AveBedrms', 0.6264338275363787), # 房间数
[('MedInc', 0.4373589305968406), # 该街区住户的收入中位数
2.5 MSE、MAE评估
# 5. MSE评估指标
import sklearn
from sklearn.metrics import mean_squared_error as MSEmse_score = MSE(Y_pred, Ytest)
print("均分误差MSE=", mse_score)
print("预测最大值:", Y_pred.max())
print("预测最小值:", Y_pred.min())
print("标签最大值:", y.max())
print("标签最小值:", y.min())# 对训练好的模型进行交叉验证
# cv=交叉验证的次数
# scoring:打分指标:neg_mean_squared_error,
# 在sklearn交叉验证中,损失/误差都是用负数表示,去掉负号,就是它的均分误差值
# 负号:表示损失!!!
mse_score = cross_val_score(model, X,y,cv=5, scoring="neg_mean_squared_error")
print("交叉验证的MSE=", mse_score)mse_score = cross_val_score(model, X,y,cv=5, scoring="neg_mean_absolute_error")
print("交叉验证的MAE=", mse_score)# 打印有哪些评估指标
sorted(sklearn.metrics.SCORERS.keys())
均分误差MSE= 0.5309012639324571 预测最大值: 7.146198214270875 预测最小值: -0.6528439725036179 标签最大值: 5.00001 标签最小值: 0.14999 交叉验证的MSE= [-0.48485857 -0.62249739 -0.64621047 -0.5431996 -0.49468484] 交叉验证的MAE= [-0.54599439 -0.5661782 -0.57654952 -0.53190614 -0.5168527 ]
2.6 R2评估
# 6. R2评估指标: 反应了模型准确性的指标
# R2的值越接近1,模型的准确性越好
# R2的值越接近0,模型的准确性越差
from sklearn.metrics import r2_score
r2 = r2_score(Ytest,Y_pred)
print("r2=",r2)r2 = model.score(Xtest,Ytest)
print("r2=",r2)
r2= 0.6043668160178817 r2= 0.6043668160178817
备注:
R2越接近1,指标越好
0.6左右的R2指标不算好,
2.7 模型指标分析
# 查找指标不好的原因
import matplotlib.pyplot as plt
print("Ytest.min", Ytest.min())
print("Ytest.max", Ytest.max())
print("Y_pred.min", Y_pred.min())
print("Y_pred.max", Y_pred.max())
plt.plot(range(len(Ytest)) ,sorted(Ytest), c="black",label= "Data")
plt.plot(range(len(Y_pred)),sorted(Y_pred),c="red", label = "Predict")
plt.legend()
plt.show()
### 备注
# 预测值的走势与样本标签值的走势在界限范围内基本相似
# 预测值在两边的边界相差较大,预测值会趋于正无穷和负无穷
# 而标签样本中的数值是有上限制与下限
Ytest.min 0.14999 Ytest.max 5.00001 Y_pred.min -0.6528439725036179 Y_pred.max 7.146198214270875
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:
[机器学习与scikit-learn-29]:算法-回归-普通线性回归LinearRegression拟合线性分布数据的代码示例相关推荐
- 机器学习与Scikit Learn学习库
摘要: 本文介绍机器学习相关的学习库Scikit Learn,包含其安装及具体识别手写体数字案例,适合机器学习初学者入门Scikit Learn. 在我科研的时候,机器学习(ML)是计算机科学领域中最 ...
- 【机器学习】P25 随机森林算法(2) 实现 “波士顿房价” 预测
随机森林算法 Random Forest Algorithm 随机森林算法 随机森林算法实现波士顿房价预测 随机森林算法 随机森林(Random Forest)算法 是一种 集成学习(Ensemble ...
- [转载]Scikit Learn: 在python中机器学习
原址:http://my.oschina.net/u/175377/blog/84420 目录[-] Scikit Learn: 在python中机器学习 载入示例数据 一个改变数据集大小的示例:数码 ...
- Scikit Learn: 在python中机器学习
Warning 警告:有些没能理解的句子,我以自己的理解意译. 翻译自:Scikit Learn:Machine Learning in Python 作者: Fabian Pedregosa, Ga ...
- 【机器学习入门】(8) 线性回归算法:正则化、岭回归、实例应用(房价预测)附python完整代码和数据集
各位同学好,今天我和大家分享一下python机器学习中线性回归算法的实例应用,并介绍正则化.岭回归方法.在上一篇文章中我介绍了线性回归算法的原理及推导过程:[机器学习](7) 线性回归算法:原理.公式 ...
- Interview:算法岗位面试—10.24下午—上海某软件公司(机器学习,上市)电话面试—考察SVM、逻辑回归、降低过拟合、卷积网络基础等
Interview:算法岗位面试-10.24下午-上海某软件公司(机器学习,上市)电话面试-考察SVM.逻辑回归.降低过拟合.卷积网络基础等 导读:当时电话来的非常快,我刚做完一家公司的笔试,接着来了 ...
- 【机器学习】九种顶流回归算法及实例总结
线性回归通常是人们为机器学习和数据科学学习的第一个算法.它简单易懂,但是由于其功能有限,在实际业务中并不是最佳选择.大多数情况下,线性回归被用作基线模型来评估和比较研究中的新方法. 在处理实际问题时, ...
- python笔迹识别_python_基于Scikit learn库中KNN,SVM算法的笔迹识别
之前我们用自己写KNN算法[网址]识别了MNIST手写识别数据 [数据下载地址] 这里介绍,如何运用Scikit learn库中的KNN,SVM算法进行笔迹识别. 数据说明: 数据共有785列,第一列 ...
- 机器学习算法大汇总--线性回归、逻辑回归、正则化、神经网络、SVM、K-Means、PCA、集成学习等!
本文很长~请耐心观看 另:本文主要用于本人的复习使用,欢迎大佬的指正和添加. 还有:本人也只是初出茅庐,希望大佬手下留情,谢谢!! 1.算法分类 机器学习算法分为: 有监督,无监督 两大阵营 1.有监 ...
- [机器学习-回归算法]Sklearn之线性回归实战
Sklearn之线性回归实战 一,前言 二,热身例子 三,贸易公司的简单例子 四,Sklearn 官网里的一个例子 五,预测每月的地铁故障数 参考资料 一,前言 一元线性回归的理论片请看我这个链接 二 ...
最新文章
- 【Python】keras卷积神经网络识别mnist
- 文件/目录权限相关命令:chmod、chown、umask、lsattr/chattr命令解析
- 黄聪:VS2010开发T4模版引擎之基础入门
- Android 网络通信框架Volley简介(Google IO 2013)
- PAT甲级1073 Scientific Notation:[C++题解]字符串处理、科学计数法
- JS_dom查询节点
- 336. Palindrome Pairs 回文对
- 无心剑中译雪莱诗14首
- python3安装教程linux_python 在linux系统的安装教程
- linux6 rac 11g,oracle linux 6.操作系统oracle 11g rac
- 32位应用程序如何使用大于2GB的内存?
- linux内核奇遇记之md源代码解读之十raid5数据流之同步数据流程
- 软件推荐——Modbus调试工具Modbus Poll与Modbus Slave
- Unable to negotiate with port 51732: no matching host key type found. Their offer:
- gitbub 上删除仓库
- 1.9无穷小新生五十年
- 千呼万唤始出来-YYC松鼠聚合系统搭建教程,理论上可对接一切API
- 排除Transformation Errors
- iOS 警告 Local declaration of 'XXX' hides instance
- !include: could not find: “nsProcessW.nsh“