241115-如何用sklearn做一个简单线性回归
241115-如何用sklearn做一个简单线性回归
可以参考如下代码:
import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# 给数据
data=np.array([[1,2],[3,4],[5,6]])
x=data[:,0].reshape(-1,1)
y=data[:,1].reshape(-1,1)
# 训练
reg=LinearRegression().fit(x,y)
# 预测
pred=reg.predict(x)
# 可视化
plt.scatter(x,y)
# 这里线的宽度和颜色必须要给,不然可能看不到线
plt.plot(x,pred,linewidth=3,color='r')
数据点比较少,只给了三个点,可能看的效果不是很好,懂意思就行
如果是从excel表格中读入的数据,我们就需要对其进行处理
初始读入的是dataframe对象,取出来直接训练会报错,因为fit方法需要的参数是array数组,不能接收df
import pandas as pd
df=pd.read_excel("your_excel.xlsx")
# 替换成你自己所需要的列名
column_list=['x','y']
# .values是转换成array,.reshape是对其形状进行重组,这里不执行reshape也是无法载入的
x=df[column_list[0]].values.reshape(-1,1)
y=df[column_list[1]].values.reshape(-1,1)
然后就得到了符合格式的x,y,用上面的训练代码和画图代码进行操作即可,以下是我的excel数据,请自备数据进行试验
同时,如果你的excel有缺失值,记得填充,这里采用均值填充
for i in column_list:
df[i]=df[i].fillna(df[i].mean())
如果需要对其相关参数进行评估,代码如下
from sklearn.metrics import mean_squared_error, r2_score
print(f"mean_squared_error:{mean_squared_error(y,pred)}")
print(f"R2score:{r2_score(y,pred)}")
以下是一个完整代码:
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error, r2_score
df=pd.read_excel("ST-temp510.xlsx")
# 替换成你自己所需要的列名
column_list=['T900','S47']
# 均值填充
for i in column_list:
df[i]=df[i].fillna(df[i].mean())
# .values是转换成array,.reshape是对其形状进行重组,这里不执行reshape也是无法载入的
x=df[column_list[0]].values.reshape(-1,1)
y=df[column_list[1]].values.reshape(-1,1)
# 训练
reg=LinearRegression().fit(x,y)
# 预测
pred=reg.predict(x)
# 可视化
plt.scatter(x,y)
# 这里线的宽度和颜色必须要给,不然可能看不到线
plt.plot(x,pred,linewidth=3,color='r')
print(f"mean_squared_error:{mean_squared_error(y,pred)}")
print(f"R2score:{r2_score(y,pred)}")
如有问题请大佬指出。