一元线性回归-python代码

1.一元回归分析的步骤

1.绘制散点图,确定回归模型类型
2.估计模型参数,建立回归模型类型
3.模型校核

2. Sklearn包

pip install sklearn
说明:使用sklearn库中的LinearRegression的输入必须是二维[[1,2,5…]]

#1.导包
from sklearn.linear_model import LinearRegression 

model=LinearRegression()
训练模型:
model.fit(x,y)

模型评估:
model.score(x,y)

模型预测:
model.predict(x)

3.数据集说明:

在这里插入图片描述

4. 代码演示

'''
y=ax+b (y为因变量,x为自变量,a为权重,b为截距。)
    1.数据相关性分析中,经常用到data.corr()函数,data.corr()表示了data中的两个变量之间的相关性,取值范围为[-1,1],取值接近-1,表示反相关,类似反比例函数,取值接近1,表正相关。

'''
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split   #切分训练集和验证集
import pandas as pd
import os

#第一步,读取数据
path = os.getcwd().replace('\\','/') + str('/1.回归问题/data/data.csv')
data = pd.read_csv(path)
# print(data.corr())

Y = data[['销售额']]       #将一维数据自动转化为二维数组
X = data[['广告投入']]

# 第二步,1.画出散点图,求x和y的相关系数
# plt.scatter(data.广告投入, data.销售额)  #输入x和y数据
# plt.rcParams['font.sans-serif'] = ['SimHei']  #用来正常显示中文标签 
# plt.xlabel("广告投入")
# plt.ylabel("销售额")

#第二步,2.绘热力图
# import seaborn as sns
# f, ax= plt.subplots(figsize = (14, 10))
# sns.heatmap(corr,cmap='RdBu', linewidths = 0.05, ax = ax)
# # 设置Axes的标题
# ax.set_title('Correlation between features')
# plt.show()
# plt.close()
# f.savefig('sns_style_origin.jpg', dpi=100, bbox_inches='tight')   #热力图保存


#%%
#第三步,生成linalg regression模型---拟合函数
linear_regressor = LinearRegression()
x_train,x_test,y_train,y_test = train_test_split(X,Y,test_size=0.3,random_state=0)   #则表示7:3进行划分数据集
linear_regressor.fit(x_train,y_train)  #拟合函数
# linear_regressor.fit(x_train,y_train).summary()  #模型描述
Y_pred = linear_regressor.predict(x_test)   #预测y   使用训练集train拟合得到拟合函数后,再使用测试集test得到预测值
print('a权重:',linear_regressor.coef_)
print('b截距:',linear_regressor.intercept_)

#第四步,数据可视化
plt.figure(figsize=(10,5))
# 训练接和测试集都以散点来表示,拟合线用折线表示
plt.scatter(x_train,y_train,s=10,label='训练集',c='b')
plt.scatter(x_test,y_test,s=10,label='测试集',c='g')
plt.plot(X,linear_regressor.predict(X),label='拟合线',c='r')  #x表所有的自变量
plt.legend() 


# 第五步,模型评估--这些任意可以选择,根据模型的还会去确定取舍
from sklearn.metrics import mean_squared_error,mean_absolute_error,r2_score
mes_test = mean_squared_error(y_test,Y_pred)

print("平均方误差(MSE):",mean_squared_error(y_test,Y_pred))
print("根均方误差(RMSE):",mean_absolute_error(y_test,Y_pred))
print("平均绝对值误差(MAE):",r2_score(y_test,Y_pred))  
RR = linear_regressor.score(x_test,y_test)
print("决定系数:",RR)  #模型越接近1,表示该模型越好

# 补充---验证该模型是否过拟合(通过训练集train进行验证)
Y_train_pred = linear_regressor.predict(x_train)   #预测y
mse_train = mean_squared_error(y_train,Y_train_pred)
# 当mes_train和mse_test误差很小,则证明该模型未发生过拟合现象。

#
# https://blog.csdn.net/qq_41583295/article/details/86444760?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-86444760-blog-121026296.pc_relevant_default&spm=1001.2101.3001.4242.2&utm_relevant_index=4
#
# # 5. 显著性检验
# # 5.1 线性相关变量的显著性检验,皮尔逊相关系数
# # print(scipy.stats.pearsonr(x, y))  # 返回r值和相关系数假设检验的p值。r越大表示线性相关程度越高。p值越小,表示原假设“总体相关系数=0的可能性越小,r值可信度越高。
#
# # 5.2 线性or非线性相关变量的显著性检验
# # 5.2.1 F检验
# MSR = SSR / p
# F = MSR / MSE
# F_p = scipy.stats.f.sf(F, p, n - 2)
# print('F检验的p值', F_p)
#
# # 5.2.2 t检验
# s_coef = np.sqrt(MSE) / np.sqrt(n * np.var(x))
# t = model.coef_ / s_coef
# print(t)
# t_p = scipy.stats.t.sf(t, n - 2)
# print('t检验的p值:', t_p)
``

```c
在这里插入代码片

5.结果展示

在这里插入图片描述

  • 2
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值