线性回归(一)
线性回归是分析因变量与自变量呈现线性关系的一种方法,来确定一个因变量如何依赖一个或多个自变量的变化而变化,运用十分广泛。
在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
线性回归常用参数:
regression.intercept_ : 截距, 默认为True,可选False
regression.coef_ : 斜率,回归系数,x对y的具体影响
regression.predict: 预测
normalize: (标准化) 默认为True,可选False
copy_X: (复制X数据)默认为True,可选False。如果选False会覆盖原数
n_jobs: (计算性能)默认为1,可选int,工作使用的数量计算。
一元线性回归
from sklearn import linear_model #导入线性模型模块
regression = linear_model.LinearRegression() #创建线性回归模型
x = [[3],[10]] #创建x坐标
y = [6,22] #创建y坐标
regression.fit(x,y) #拟合
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
regression.intercept_ #截距,以下划线结束
-0.8571428571428559
regression.coef_ #斜率,回归系数,x对y的具体影响
array([2.28571429])
regression.predict([[6]]) #对未知点进行预测
array([12.85714286])
regression.score([[6],[7],[8],[9]],[12.8,14.6,17.8,19.5]) #返回可决系数R2
0.9825215658041578
#练习
regression1 = linear_model.LinearRegression() #创建线性回归模型
x1 = [[3],[10],[12],[15]] #创建x坐标
y1 = [6,22,24,29] #创建y坐标
regression1.fit(x1,y1) #拟合
regression1.intercept_
0.8910256410256423
regression1.coef_
array([1.93589744])
regression1.predict([[6],[7],[8]])
array([12.50641026, 14.44230769, 16.37820513])
regression1.score([[6],[7],[8],[9]],[12.8,14.6,17.8,19.5])
0.8716272717012157
# 案例:假如研究学生学习时长(分钟)与考试成绩(分)的关系,考试成绩为因变量,学习时长为自变量,首先导入回归模块
import pandas as pd #导入pandas库
import numpy as np #导入numpy库
#from sklearn import linear_model #导入线性模型模块
#regression = linear_model.LinearRegression() #创建线性回归模型,导入线性模块也可采用下列方式一次性导入
from sklearn.linear_model import LinearRegression #导入机器学习库中的线性回归模块
data=pd.DataFrame({'times':[150,200,250,300,350,400,600],
'scores':[64,68,75,79,85,89,93]})
#创建一组7行2列的数据,times为学习时长,scores为对应成绩
data_train=np.array(data['times']).reshape(data['times'].shape[0],1)#这里是将数据转化为一个1维矩阵
data_test=data['scores']
#创建线性回归模型,拟合学习时长与学习成绩的关系,并预测成绩
reg1=LinearRegression() #创建线性回归模型,参数默认
reg1.fit(data_train,data_test)#拟合数据
a=reg1.predict(268.5) #预测学习时长为268.5分钟的学习成绩
print(a)#查看预测结果
print(reg1.score(data_train,data_test))#查看拟合准确率情况,这里的检验是 R^2 ,趋近于1模型拟合越好
[75.43295213]
0.8788360721074254
#预测的结果:学习时长为268.5分钟,则对应的学习成绩为75.43分, R^2 =0.8788
#我们来画个图看一下数据最后是什么样的
import matplotlib.pyplot as plt
plt.scatter(data['times'],data['scores']) #画散点图
plt.plot(data['times'],reg1.predict(np.array(data['times']).reshape(data['times'].shape[0],1)),color='red') #画拟合线型图
[<matplotlib.lines.Line2D at 0x21c131f8128>]