作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_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拟合线性分布数据的代码示例相关推荐

  1. 机器学习与Scikit Learn学习库

    摘要: 本文介绍机器学习相关的学习库Scikit Learn,包含其安装及具体识别手写体数字案例,适合机器学习初学者入门Scikit Learn. 在我科研的时候,机器学习(ML)是计算机科学领域中最 ...

  2. 【机器学习】P25 随机森林算法(2) 实现 “波士顿房价” 预测

    随机森林算法 Random Forest Algorithm 随机森林算法 随机森林算法实现波士顿房价预测 随机森林算法 随机森林(Random Forest)算法 是一种 集成学习(Ensemble ...

  3. [转载]Scikit Learn: 在python中机器学习

    原址:http://my.oschina.net/u/175377/blog/84420 目录[-] Scikit Learn: 在python中机器学习 载入示例数据 一个改变数据集大小的示例:数码 ...

  4. Scikit Learn: 在python中机器学习

    Warning 警告:有些没能理解的句子,我以自己的理解意译. 翻译自:Scikit Learn:Machine Learning in Python 作者: Fabian Pedregosa, Ga ...

  5. 【机器学习入门】(8) 线性回归算法:正则化、岭回归、实例应用(房价预测)附python完整代码和数据集

    各位同学好,今天我和大家分享一下python机器学习中线性回归算法的实例应用,并介绍正则化.岭回归方法.在上一篇文章中我介绍了线性回归算法的原理及推导过程:[机器学习](7) 线性回归算法:原理.公式 ...

  6. Interview:算法岗位面试—10.24下午—上海某软件公司(机器学习,上市)电话面试—考察SVM、逻辑回归、降低过拟合、卷积网络基础等

    Interview:算法岗位面试-10.24下午-上海某软件公司(机器学习,上市)电话面试-考察SVM.逻辑回归.降低过拟合.卷积网络基础等 导读:当时电话来的非常快,我刚做完一家公司的笔试,接着来了 ...

  7. 【机器学习】九种顶流回归算法及实例总结

    线性回归通常是人们为机器学习和数据科学学习的第一个算法.它简单易懂,但是由于其功能有限,在实际业务中并不是最佳选择.大多数情况下,线性回归被用作基线模型来评估和比较研究中的新方法. 在处理实际问题时, ...

  8. python笔迹识别_python_基于Scikit learn库中KNN,SVM算法的笔迹识别

    之前我们用自己写KNN算法[网址]识别了MNIST手写识别数据 [数据下载地址] 这里介绍,如何运用Scikit learn库中的KNN,SVM算法进行笔迹识别. 数据说明: 数据共有785列,第一列 ...

  9. 机器学习算法大汇总--线性回归、逻辑回归、正则化、神经网络、SVM、K-Means、PCA、集成学习等!

    本文很长~请耐心观看 另:本文主要用于本人的复习使用,欢迎大佬的指正和添加. 还有:本人也只是初出茅庐,希望大佬手下留情,谢谢!! 1.算法分类 机器学习算法分为: 有监督,无监督 两大阵营 1.有监 ...

  10. [机器学习-回归算法]Sklearn之线性回归实战

    Sklearn之线性回归实战 一,前言 二,热身例子 三,贸易公司的简单例子 四,Sklearn 官网里的一个例子 五,预测每月的地铁故障数 参考资料 一,前言 一元线性回归的理论片请看我这个链接 二 ...

最新文章

  1. 【Python】keras卷积神经网络识别mnist
  2. 文件/目录权限相关命令:chmod、chown、umask、lsattr/chattr命令解析
  3. 黄聪:VS2010开发T4模版引擎之基础入门
  4. Android 网络通信框架Volley简介(Google IO 2013)
  5. PAT甲级1073 Scientific Notation:[C++题解]字符串处理、科学计数法
  6. JS_dom查询节点
  7. 336. Palindrome Pairs 回文对
  8. 无心剑中译雪莱诗14首
  9. python3安装教程linux_python 在linux系统的安装教程
  10. linux6 rac 11g,oracle linux 6.操作系统oracle 11g rac
  11. 32位应用程序如何使用大于2GB的内存?
  12. linux内核奇遇记之md源代码解读之十raid5数据流之同步数据流程
  13. 软件推荐——Modbus调试工具Modbus Poll与Modbus Slave
  14. Unable to negotiate with port 51732: no matching host key type found. Their offer:
  15. gitbub 上删除仓库
  16. 1.9无穷小新生五十年
  17. 千呼万唤始出来-YYC松鼠聚合系统搭建教程,理论上可对接一切API
  18. 排除Transformation Errors
  19. iOS 警告 Local declaration of 'XXX' hides instance
  20. !include: could not find: “nsProcessW.nsh“

热门文章

  1. 关于手机游戏市场的调研方案(终结版)
  2. 抖音根据关键词获取视频列表接口调用展示
  3. 问题 C: 神奇的口袋
  4. ODM/OEM/OBM区分
  5. 【mysql数据导入】数据导入时的几种方法
  6. matlab剪切板中内容清除,清除剪贴板的内容
  7. win7家庭版如何升级到专业版和旗舰版
  8. 麻将胡牌判定方法-索引法
  9. ThreadLocal入门
  10. 电脑桌面美化教程,强迫症福利