基于python3.7 numpy scipy matplotlib sklearn的机器学习笔记6--回归分析(线性回归、多项式回归、岭回归)

线性回归
1 线性回归(Linear Regression)是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
2 线性回归利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。

基于python3.7 numpy scipy matplotlib sklearn的机器学习笔记6--回归分析(线性回归、多项式回归、岭回归)

线性回归的实际用途
线性回归有很多实际的用途,分为以下两类:
1.如果目标是预测或者映射,线性回归可以用来对观测数据集的y和X的值拟合出一个预测模型。当完成这样一个模型以后,对于一个新增的X值,在没有给定与它相配对的y的情况下,可以用这个拟合过的模型预测出一个y值。
2.给定一个变量y和一些变量X1, ⋯ , ????????,这些变量有可能与y相关,线
性回归分析可以用来量化y与X???? 之间相关性的强度,评估出与y不相关的X???? ,并识别出哪些X????的子集包含了关于y的冗余信息。

算法实例(基于房屋价格的预测模型)

数据集

1000,168
792,184
1260,197
1262,220
1240,228
1170,248
1230,305
1255,256
1194,240
1450,230
1481,202
1475,220
1482,232
1484,460
1512,320
1680,340
1620,240
1720,368
1800,280
4400,710
4212,552
3920,580
3212,585
3151,590
3100,560
2700,285
2612,292
2705,482
2570,462
2442,352
2387,440
2292,462
2308,325
2252,298
2202,352
2157,403
2140,308
4000,795
4200,765
3900,705
3544,420
2980,402
4355,762
3150,392

上述数据复制到txt文档prices中备用

代码:

import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
     
     
# 读取数据集
datasets_X = []#存放房屋尺寸
datasets_Y = []#与成交价格
fr = open('prices.txt','r')
lines = fr.readlines()
for line in lines:
    items = line.strip().split(',')
    datasets_X.append(int(items[0]))
    datasets_Y.append(int(items[1]))
     
length = len(datasets_X)

datasets_X = np.array(datasets_X).reshape([length,1])#若不进行reshape会导致矩阵的维度出现(44,)形式,在线性回归计算时,会出现维度不符的错误
datasets_Y = np.array(datasets_Y)
'''
以数据datasets_X的最大值和最小
值为范围,建立等差数列,方便后
续画图。
'''
minX = min(datasets_X)
maxX = max(datasets_X)
X = np.arange(minX,maxX).reshape([-1,1])
     
     
linear = linear_model.LinearRegression()
linear.fit(datasets_X, datasets_Y)

#查看回归方程的系数与截距
print('Coefficients:',linear.coef_)
print('intercept:',linear.intercept_)
# 图像中显示
plt.scatter(datasets_X, datasets_Y, color = 'red')
plt.plot(X, linear.predict(X), color = 'blue')
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()

实验结果:

Coefficients: [0.14839484]
intercept: 43.92337096187816

基于python3.7 numpy scipy matplotlib sklearn的机器学习笔记6--回归分析(线性回归、多项式回归、岭回归)

 

多项式 回归
 多项式 回归 (Polynomial Regression )是研究一 个因变量与个或多自变量间多项式的回归分析方法。如果自变量只有一个时,称为一元多项式回归;如果自变量有多个时,成为多元多项式回归。

基于python3.7 numpy scipy matplotlib sklearn的机器学习笔记6--回归分析(线性回归、多项式回归、岭回归)

多项式 回归
 在一元回归分析中,如果依变量 y与自变量 x的关系为非线性,但 是又找不到适当的函数曲线来拟合,则可以采用一元多项式回归 。
 多项式回归 的最大优点就是可以通过增加 x的高次项对实测点进行逼 近,直至满意为止 。
 事实上 ,多项式回归可以处理相当一类非线性问题,它在分析 中占有重要的地位,因为任一函数都可以分段用多项式来逼近 。

基于python3.7 numpy scipy matplotlib sklearn的机器学习笔记6--回归分析(线性回归、多项式回归、岭回归)

实验数据与上例相同,代码如下

import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures
     
     
# 读取数据集
datasets_X = []
datasets_Y = []
fr = open('prices.txt','r')
lines = fr.readlines()
for line in lines:
    items = line.strip().split(',')
    datasets_X.append(int(items[0]))
    datasets_Y.append(int(items[1]))
     
length = len(datasets_X)
datasets_X = np.array(datasets_X).reshape([length,1])
datasets_Y = np.array(datasets_Y)
     
minX = min(datasets_X)
maxX = max(datasets_X)
X = np.arange(minX,maxX).reshape([-1,1])
     
##此两句时sklearn库解决多项式回归的核心

基于python3.7 numpy scipy matplotlib sklearn的机器学习笔记6--回归分析(线性回归、多项式回归、岭回归) 
poly_reg = PolynomialFeatures(degree = 2)
X_poly = poly_reg.fit_transform(datasets_X)

lin_reg_2 = linear_model.LinearRegression()
lin_reg_2.fit(X_poly, datasets_Y)
#查看回归方程的系数与截距
print('Coefficients:',lin_reg_2.coef_)
print('intercept:',lin_reg_2.intercept_)
     
# 图像中显示
plt.scatter(datasets_X, datasets_Y, color = 'red')
plt.plot(X, lin_reg_2.predict(poly_reg.fit_transform(X)), color = 'blue')
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()

实验结果:

Coefficients: [0.00000000e+00 4.93982848e-02 1.89186822e-05]
intercept: 151.8469675050046

基于python3.7 numpy scipy matplotlib sklearn的机器学习笔记6--回归分析(线性回归、多项式回归、岭回归)

 

 

岭回归
 岭回归 (ridge regression)是一种专用于共线性数据分析的有偏估计回归 方 法,是一种改良的最小二乘估计法 ,对某些数据 的拟合要强于最小二乘法 。

实验数据为某年交通要道车流量信息

   留下邮箱即可获取

代码如下

###岭回归
import numpy as np
import pandas as pd
from sklearn.linear_model import Ridge
from sklearn import model_selection
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures

##数据加载
#data=np.genfromtxt('data.txt')
data=pd.read_csv("岭回归.csv")
row,col=data.shape
print(row,col)
data_res=np.array(data[0:row]\
                  [[u'HR',u'WEEK_DAY',u'DAY_OF_YEAR',u'WEEK_OF_YEAR',u'TRAFFIC_COUNT']])
print(data_res.shape,type(data_res))

#数据处理
X=data_res[:,:4]
y=data_res[:,4]
poly=PolynomialFeatures(6)#以最高次为6的多项式拟合
X=poly.fit_transform(X)

train_set_X,test_set_X,train_set_y,test_set_y=model_selection.train_test_split(X,y,test_size=0.3,random_state=0)
clf=Ridge(alpha=1.0,fit_intercept=True)
clf.fit(train_set_X,train_set_y)
clf.score(test_set_X,test_set_y)

##利用测试集计算回归曲线的拟合优度, clf.score 返回值为 0.7375
#拟合优度,用于评价好坏最大为 1,无最小值,
#当对所有输 入都输出同一个值时,拟合优度为 0。

plt.figure(1)
#绘制车流量信息
plt.subplot(211)
plt.plot(data_res[:,4])

#绘制拟合曲线
plt.subplot(212)
start=200
end=300
y_pre=clf.predict(X)
time=np.arange(start,end)
plt.plot(time,y[start:end],'b',label="real")
plt.plot(time,y_pre[start:end],'r',label="predict")
plt.legend(loc='upper left')
plt.show()
print("end")

 

实验效果

基于python3.7 numpy scipy matplotlib sklearn的机器学习笔记6--回归分析(线性回归、多项式回归、岭回归)

--------------------------------------------------------------------------------------------------------------------参考mooc网课,北理工python机器学习应用课程