sklearn调包侠之线性回归

简介: 线性回归原理如图所示,这是一组二维的数据,我们先想想如何通过一条直线较好的拟合这些散点了?直白的说:尽量让拟合的直线穿过这些散点(这些点离拟合直线很近)。
img_745f3c3f47200dd2ea7987ae88e25fec.png

线性回归原理

如图所示,这是一组二维的数据,我们先想想如何通过一条直线较好的拟合这些散点了?直白的说:尽量让拟合的直线穿过这些散点(这些点离拟合直线很近)。

img_f9d60858152aef8453ffcfdc4dc3992e.png
目标函数(成本函数)

要使这些点离拟合直线很近,我们需要用数学公式来表示:

img_25d94181bc646e8869b5dc8fd2e7c20b.png
梯度下降法

之前在讲解回归时,是通过求导获取最小值,但必须满足数据可逆,这里通常情况下使用梯度下降法,也就是按着斜率方向偏移。详细可看这篇文章(https://www.jianshu.com/p/96566542b07a)。
tips:这篇文章讲解了梯度上升法,梯度下降法类似。

img_934720a23364477c7220565869d167ac.png

实战——房价预测

数据导入

该数据使用sklearn自带的数据集,通过sklearn.datasets导入我们的boston房价数据集。

from sklearn.datasets import load_boston
boston = load_boston()

通过DESCR属性可以查看数据集的详细情况,这里数据有14列,前13列为特征数据,最后一列为标签数据。

print(boston.DESCR)
img_70621c004595a63115e30471f7dfa485.png

boston的data和target分别存储了特征和标签:

img_937d430fd46f23dc29022b1cfbd77bcd.png
切分数据集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size = 0.2, random_state=2)
数据预处理

普通的线性回归模型太简单,容易导致欠拟合,我们可以增加特征多项式来让线性回归模型更好地拟合数据。在sklearn中,通过preprocessing模块中的PolynomialFeatures来增加特征多项式。
其重要参数有:

  • degree:多项式特征的个数,默认为2
  • include_bias:默认为True,包含一个偏置列,也就是 用作线性模型中的截距项,这里选择False,因为在线性回归中,可以设置是否需要截距项。
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2,include_bias=False)
X_train_poly = poly.fit_transform(X_train)
X_test_poly = poly.fit_transform(X_test)
模型训练与评估

线性算法使用sklearn.linear_model 模块中的LinearRegression方法。常用的参数如下:

  • fit_intercept:默认为True,是否计算截距项。
  • normalize:默认为False,是否对数据归一化。

简单线性回归

from sklearn.linear_model import LinearRegression

model2 = LinearRegression(normalize=True)
model2.fit(X_train, y_train)
model2.score(X_test, y_test)

# result
# 0.77872098747725804

多项式线性回归

model3 = LinearRegression(normalize=True)
model3.fit(X_train_poly, y_train)
model3.score(X_test_poly, y_test)

# result
# 0.895848854203947
总结

多项式的个数的不断增加,可以在训练集上有很好的效果,但缺很容易造成过拟合,没法在测试集上有很好的效果,也就是常说的:模型泛化能力差。

相关文章
|
4月前
|
算法 Python
线性回归-最小二乘法入门(波士顿房价)
线性回归-最小二乘法入门(波士顿房价)
91 0
|
2月前
|
机器学习/深度学习 算法 API
Sklearn中的监督学习全览:从线性回归到SVM
【7月更文第23天】 在机器学习的广阔领域中,监督学习占据着举足轻重的地位,它通过已标记的数据集学习输入与输出之间的映射关系,进而对未知数据进行预测。`scikit-learn`(简称sklearn)作为Python中最受欢迎的机器学习库之一,提供了丰富的监督学习算法。本篇文章将带您深入探索sklearn中的监督学习世界,从简单的线性回归到复杂的支撑向量机(SVM),并通过实战代码示例,让您对这些算法有更直观的理解。
46 8
|
4月前
|
机器学习/深度学习 数据挖掘 Python
Python数据分析 | 泰坦尼克逻辑回归(下)
Python数据分析 | 泰坦尼克逻辑回归
30 1
|
4月前
|
机器学习/深度学习 数据挖掘 BI
Python数据分析 | 泰坦尼克逻辑回归(上)
Python数据分析 | 泰坦尼克逻辑回归
59 0
|
4月前
|
机器学习/深度学习
R语言非线性回归和广义线性模型:泊松、伽马、逻辑回归、Beta回归分析机动车事故、小鼠感染、蛤蜊数据、补剂钠摄入数据|数据分享(上)
R语言非线性回归和广义线性模型:泊松、伽马、逻辑回归、Beta回归分析机动车事故、小鼠感染、蛤蜊数据、补剂钠摄入数据|数据分享
|
4月前
|
机器学习/深度学习 数据可视化
R语言非线性回归和广义线性模型:泊松、伽马、逻辑回归、Beta回归分析机动车事故、小鼠感染、蛤蜊数据、补剂钠摄入数据|数据分享(下)
R语言非线性回归和广义线性模型:泊松、伽马、逻辑回归、Beta回归分析机动车事故、小鼠感染、蛤蜊数据、补剂钠摄入数据|数据分享
|
4月前
|
机器学习/深度学习 算法 Python
python在Scikit-learn中用决策树和随机森林预测NBA获胜者
python在Scikit-learn中用决策树和随机森林预测NBA获胜者
|
4月前
|
机器学习/深度学习 Python
Python利用随机森林对泰坦尼克号乘客生还进行预测实战(超详细 附源码)
Python利用随机森林对泰坦尼克号乘客生还进行预测实战(超详细 附源码)
149 1
|
机器学习/深度学习 自然语言处理 数据可视化
scikit-learn的5个秘密武器
虽然scikit-learn在机器学习领域很重要,但是很多人并不知道利用这个库中的一些强大的功能。本文将介绍scikit-learn中5个最有用的5个隐藏的瑰宝,充分利用这些秘密武器将有效提高你的机器学习处理的效率!
270 0
scikit-learn的5个秘密武器
|
机器学习/深度学习 算法 JavaScript
sklearn调包侠之逻辑回归
本系列教程为《机器学习实战》的读书笔记。首先,讲讲写本系列教程的原因: 第一,《机器学习实战》的代码由Python2编写,有些代码在Python3上运行已会报错,本教程基于Python3进行代码的修订. 第二:之前看了一些机器学习的书籍,没有进行记录,很快就忘记掉了,通过编写教程也是一种复习的过程. 第三,机器学习相对于爬虫和数据分析而言,学习难度更大,希望通过本系列文字教程,让读者在学习机器学习的路上少走弯路。