python 多重线性回归_python线性回归

一个简单的线性回归模型测试。

定义:

线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。

表达形式为y =aX+b,b为误差服从均值为0的正态分布,a为截距。

回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。

用途:

线性回归,主要用来做预测分析,例如预测未来一周天气、下一季度月销售量,销售额,身高和体重的配比,等等问题..........

模型检验:

指标

显著性水平P

意义

R2

0.99

“质量”解释了99%的“用户满意度”的变化程度

验证方程模型是否可行

F

276.82

0.001

<0.05,回归方程的线性关系显著

T

16.64

0.001

<0.05,回归方程的系数显著

模型实现代码:

import numpy as npimport pandas as pdimport numpy as npfrom sklearn import linear_model #导入机器学习库中的线性回归方法from matplotlib import pyplot as pltdata=pd.DataFrame({'price':[12,52,33,45,24,51,26,37],'sales':[2030,509,1457,1085,875,2301,1521,1689]})#data1=pd.read_excel(r'C:\Users\ll\Desktop\py\回归模型')#读取表数据print(data)#数据预处理。选择x,y变量,如果有空值,可以剔除。x=np.array(data['price']).reshape([8,1])y=np.array(data['sales']).reshape([8,1])#print(x,'\n',y)#探索性数据分析。绘制散点图,观察数据关系及趋势变化。plt.scatter(x,y)plt.show()#从图形中可以看出,除去一些异常值的情况下,x,y之间存在一定的线性关系。#在实际情况中,用于线性回归的样本量应该稍大一些,趋势才会更明显。#建立线性回归模型,并进行模型训练。model=linear_model.LinearRegression()model.fit(x,y)#检验模型效果。coef=model.coef_ #获取自变量系数model_intercept=model.intercept_#获取截距R2=model.score(x,y) #R的平方print('线性回归方程为:','\n','y=’{}*x+{}'.format(coef,model_intercept))#利用上面的结果进行回归预测。new_x=[[60]]y_pre=model.predict(new_x)print(y_pre)# 用训练集进行拟合优度,验证回归方程是否合理def get_lr_stats(x, y, model):  message0 = '一元线性回归方程为: '+'\ty' + '=' + str(model.intercept_)+' + ' +str(model.coef_[0]) + '*x'  from scipy import stats  n = len(x)  y_prd = model.predict(x)  Regression = sum((y_prd - np.mean(y))**2) # 回归平方和  Residual  = sum((y - y_prd)**2)     # 残差平方和  total = sum((y-np.mean(y))**2) #总体平方和  R_square  = 1-Residual / total # 相关性系数R^2  message1 = ('相关系数(R^2): ' + str(R_square) + ';' + '\n'+ '总体平方和(TSS): ' + str(total) + ';' + '\n')  message2 = ('回归平方和(RSS): ' + str(Regression) + ';' + '\n残差平方和(ESS): ' + str(Residual) + ';' + '\n')  return print(message0 +'\n' +message1 + message2 ) get_lr_stats(x,y,model)#训练数据的预测值y_train_pred = model.predict(x)#绘制最佳拟合线:标签用的是训练数据集中的极值预测值X_train_pred = [min(x),max(y)]y_train_pred = [1767.72109827+-9.55274566*min(x),1767.72109827+9.55274566*max(x)]plt.plot(X_train_pred, y_train_pred, color='green', linewidth=3, label="best line")#测试数据散点图plt.scatter(x,y,color='red',label='data')#plt.scatter(X_test, Y_test, color='red', label="test data")#plt.scatter(X_train, Y_train, color="blue", label="train data") #添加图标标签plt.legend(loc=2)plt.xlabel("Hours")plt.ylabel("Score")#显示图像plt.savefig("lines.jpg")plt.show()#计算拟合优度score = model.score(x,y)print(score)               
已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页