线性回归是基本的统计和机器学习技术之一。经济,计算机科学,社会科学等等学科中,无论是统计分析,或者是机器学习,还是科学计算,都有很大的机会需要用到线性模型。建议先学习它,然后再尝试更复杂的方法。
本文主要介绍如何逐步在Python中实现线性回归。而至于线性回归的数学推导、线性回归具体怎样工作,参数选择如何改进回归模型将在以后说明。
回归
回归分析是统计和机器学习中最重要的领域之一。有许多可用的回归方法。线性回归就是其中之一。而线性回归可能是最重要且使用最广泛的回归技术之一。这是最简单的回归方法之一。它的主要优点之一是线性回归得到的结果十分容易解释。那么回归主要有:
- 简单线性回归
- 多元线性回归
- 多项式回归
如何在python中实现线性回归
用到的packages
- NumPy
NumPy是Python的基础科学软件包,它允许在单维和多维数组上执行许多高性能操作。
- scikit-learn
scikit-learn是在NumPy和其他一些软件包的基础上广泛使用的Python机器学习库。它提供了预处理数据,减少维数,实现回归,分类,聚类等的方法。
- statsmodels
如果要实现线性回归并且需要功能超出scikit-learn的范围,则应考虑使用statsmodels可以用于估算统计模型,执行测试等。
scikit-learn的简单线性回归
1.导入用到的packages和类
import numpy as np from sklearn.linear_model import LinearRegression
2.创建数据
x = np.array([5, 15, 25, 35, 45, 55]).reshape((-1, 1)) y = np.array([5, 20, 14, 32, 22, 38])
现在就生成了两个数组:输入x(回归变量)和输出y(预测变量),来看看
> print(x) [[ 5] [15] [25] [35] [45] [55]] > print(y) [ 5 20 14 32 22 38]
可以看到x是二维的而y是一维的,因为在复杂一点的模型中,系数不只一个。这里就用到了.reshape()来进行转换。
3.建立模型
创建一个类的实例LinearRegression,它将代表回归模型:
model = LinearRegression()
现在开始拟合模型,首先可以调用.fit()函数来得到优的"htmlcode">
model.fit(x, y) model = LinearRegression().fit(x, y)
4.查看结果
拟合模型之后就是查看与模型相关的各项参数
> r_sq = model.score(x, y) > print('coefficient of determination:', r_sq) coefficient of determination: 0.715875613747954
.score()函数可以获得模型的"htmlcode">
> print('intercept:', model.intercept_) intercept: 5.633333333333329 > print('slope:', model.coef_) slope: [0.54]
可以看到系数和截距分别为[0.54]和5.6333,注意系数是一个二维数组哦。
5.预测效果
一般而言,线性模型最后就是用来预测,我们来看下预测效果
> y_pred = model.predict(x) > print('predicted response:', y_pred, sep='\n') predicted response: [ 8.33333333 13.73333333 19.13333333 24.53333333 29.93333333 35.33333333]
当然也可以使用下面的方法
> y_pred = model.intercept_ + model.coef_ * x > print('predicted response:', y_pred, sep='\n') predicted response: [[ 8.33333333] [13.73333333] [19.13333333] [24.53333333] [29.93333333] [35.33333333]]
除了可以利用样本内的数据进行预测,也可以用样本外的数据进行预测。
> x_new = np.arange(5).reshape((-1, 1)) > print(x_new) [[0] [1] [2] [3] [4]] > y_new = model.predict(x_new) > print(y_new) [5.63333333 6.17333333 6.71333333 7.25333333 7.79333333]
至此,一个简单的线性回归模型就建立起来了。
scikit-learn的多元线性回归
直接开始吧
1.导入包和类,并创建数据
import numpy as np from sklearn.linear_model import LinearRegression x = [[0, 1], [5, 1], [15, 2], [25, 5], [35, 11], [45, 15], [55, 34], [60, 35]] y = [4, 5, 20, 14, 32, 22, 38, 43] x, y = np.array(x), np.array(y)
看看数据
> print(x) [[ 0 1] [ 5 1] [15 2] [25 5] [35 11] [45 15] [55 34] [60 35]] > print(y) [ 4 5 20 14 32 22 38 43]
2.建立多元回归模型
model = LinearRegression().fit(x, y)
3.查看结果
> r_sq = model.score(x, y) > print('coefficient of determination:', r_sq) coefficient of determination: 0.8615939258756776 > print('intercept:', model.intercept_) intercept: 5.52257927519819 > print('slope:', model.coef_) slope: [0.44706965 0.25502548]
4.预测
#样本内 > y_pred = model.predict(x) > print('predicted response:', y_pred, sep='\n') predicted response: [ 5.77760476 8.012953 12.73867497 17.9744479 23.97529728 29.4660957 38.78227633 41.27265006] #样本外 > x_new = np.arange(10).reshape((-1, 2)) > print(x_new) [[0 1] [2 3] [4 5] [6 7] [8 9]] > y_new = model.predict(x_new) > print(y_new) [ 5.77760476 7.18179502 8.58598528 9.99017554 11.3943658 ]
所有的结果都在结果里,就不再过多解释。再看看多项式回归如何实现。
多项式回归
导入包和创建数据
import numpy as np from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures x = np.array([5, 15, 25, 35, 45, 55]).reshape((-1, 1)) y = np.array([15, 11, 2, 8, 25, 32])
多项式回归和之前不一样的是需要对数据转换,因为模型里包含"htmlcode">
transformer = PolynomialFeatures(degree=2, include_bias=False)
再看看数据
> print(x_) [[ 5. 25.] [ 15. 225.] [ 25. 625.] [ 35. 1225.] [ 45. 2025.] [ 55. 3025.]]
建模
接下来的步骤就和之前的类似了。其实多项式回归只是多了个数据转换的步骤,因此从某种意义上,多项式回归也算是线性回归。
model = LinearRegression().fit(x_, y)
查看结果
> r_sq = model.score(x_, y) > print('coefficient of determination:', r_sq) coefficient of determination: 0.8908516262498564 > print('intercept:', model.intercept_) intercept: 21.372321428571425 > print('coefficients:', model.coef_) coefficients: [-1.32357143 0.02839286]
预测
> y_pred = model.predict(x_) > print('predicted response:', y_pred, sep='\n') predicted response: [15.46428571 7.90714286 6.02857143 9.82857143 19.30714286 34.46428571]
那么本次多项式回归的所有结果都在上面了,一目了然。
以上就是如何在python中实现线性回归的详细内容,更多关于Python实现线性回归的资料请关注其它相关文章!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]