回归模型---一次函数与高次函数

有一组数据,通过这组数据来建立回归方程: 

先画一个散点图:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
#设置中文显示
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False

path = 'C:/Users/Lenovo/Desktop/shuzizuoye/example/data.txt'
data = pd.read_csv(path, header=None)
plt.scatter(data[:][0], data[:][1], marker='+')#画出数据散点图
data = np.array(data)
y = data[:, 1]#y取第二列数据
x = data[:, :1]

model = LinearRegression()
model.fit(x,y)
plt.scatter(x,y)
plt.plot(x,model.predict(x),color='red')
plt.xlabel('人口')#x轴随便命名--例如人口
plt.ylabel('工资')#y轴随便命名--例如工资
plt.show()
model.coef_,model.intercept_

 

 这里的1.19就是y=ax+b中的a,-3.89就是b。

但是对于有些数据来说不适合使用一次线性回归,更适合二次或者更高的此时,这里还是使用这组数据举例。

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression

plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False

path = 'C:/Users/Lenovo/Desktop/shuzizuoye/example/data.txt'
data = pd.read_csv(path, header=None)
plt.scatter(data[:][0], data[:][1], marker='+')#画出数据散点图
data = np.array(data)
y = data[:, 1]#y取第二列数据
x = data[:, :1]

# 用于增加一个多次项内容的模块PolynomialFeatures
from sklearn.preprocessing import PolynomialFeatures
 
# 设置最高次项为二次项,为生成二次项数据(x^2)做准备
poly_reg = PolynomialFeatures(degree=2)
 
# 将原有的X转换为一个新的二维数组X_,该二维数组包含新生成的二次项数据(x^2)和原有的一次项数据(x)。
X_ = poly_reg.fit_transform(x)
 
model = LinearRegression()
model.fit(X_,y)

 
plt.scatter(x,y)
plt.plot(x,model.predict(X_),color='r')
plt.show()
 
model.coef_,model.intercept_

这里0代表y=ax^2+bx+c中的c,1.1代表b,0.003代表a。

 

 当degree=1时与一次回归方程一样。

建立完回归方程之后需要对方程进行评估,

R-squared(即统计学中的R2)、Adj.R-squared(即Adjusted R2)、P值。

其中R-squared和Adj.R-squared用来衡量线性拟合的优劣,P值用来衡量特征变量的显著性。

R-squared和Adj.R-squared的取值范围为0~1,它们的值越接近1,则模型的拟合程度越高;P值在本质上是个概率值,其取值范围也为0~1,P值越接近0,则特征变量的显著性越高,即该特征变量真的和目标变量具有相关性。
原文链接:https://blog.csdn.net/qq_42433311/article/details/124097370

import statsmodels.api as sm
 
# add_constant()函数给原来的特征变量X添加常数项,并赋给X2,这样才有y=ax+b中的常数项,即截距b
X2 = sm.add_constant(X_)
# 用OLS()和fit()函数对Y和X2进行线性回归方程搭建
est = sm.OLS(y,X_).fit()
est.summary()

 另一种计算r2的方式:

from sklearn.metrics import r2_score
r2 = r2_score(y,model.predict(X_))
print(r2)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值