回归是一种有监督的学习方式,需要根据历史数据对未知数据做出预测。
在此,以房屋面积预测房屋价格为例:
首先,读入数据:
代码如下:
import pandas as pd
import numpy as np
from io import StringIO
from sklearn import linear_model
import matplotlib.pyplot as plt
# 房屋面积与价格历史数据(csv文件)
csv_data = 'square_feet,price\n150,6450\n200,7450\n250,8450\n300,9450\n350,11450\n400,15450\n600,18450\n'
# 读入dataframe
df=pd.read_csv(StringIO(csv_data))
# print(df)
其次,建立线性回归模型,并对数据进行拟合,代码如下:
# 建立线性回归模型
regr=linear_model.LinearRegression()
# 拟合
regr.fit(df['square_feet'].values.reshape(-1, 1), df['price'])
# 用values方法将Series对象转化成numpy的ndarray,再用ndarray的reshape方法。
# 注意此处.reshape(-1, 1),因为X是一维的!
得到模型的截距和斜率:
# 直线的截距,斜率
a,b=regr.coef_,regr.intercept_
两种方式进行预测:
第一种方式是根据得到的模型直接进行的计算,第二种方式是根据回归模型的预测方法Predict进行的预测,通过运行代码可知两种方法得到的结果一致。
# 给出待预测面积
area=238.5
# 方式1:根据直线方程计算的价格
print(a*area+b)
# 方式2:根据predict方法预测的价格
print(regr.predict(area))
绘图,分别绘制散点图和拟合的直线:
# 画图
# 1.真实的点(绘制的散点图)
plt.scatter(df['square_feet'],df['price'],color='blue')
# 2.拟合的直线
plt.plot(df['square_feet'],regr.predict(df['square_feet'].values.reshape(-1,1)),color='red',linewidth=4)
plt.show()
至此,一元线性回归模型就创建完成了!
对于模型的学习,建议大家在了解了算法的原理之后要动手实战,毕竟机器学习或者数据挖掘重在实战,我们最终是要做出模型来进行决策的。多动手,你会发现原本枯燥的原理、算法会变得清晰,自己也会更加感兴趣!