机器学习之单因子、多因子线性回归实战【详细】

   日期:2020-05-13     浏览:234    评论:0    
核心提示:1. 线性回归实战准备1.1 Scikit-learn介绍sklearn (scikit-learn) 是基于 Python 语言的机器学习工具,是专门针对机器学习应用发展起来的一款开源框架(算法库),可以实现数据预处理、分类、回归、降维、模型选择等常用的机器学习算法。简单高效的数据挖掘和数据分析工具可供大家在各种环境中重复使用建立在 NumPy ,SciPy 和 matplotlib 上开源,可商业使用 - BSD许可证Scikit-learn集成了很多机器学习中成熟的算法,容易安.数据结构与算法


文章目录

    • 1. 线性回归实战准备
      • 1.1 scikit-learn介绍
      • 1.2 sklearn求解线性回归
      • 1.3 模型表现评估
      • 1.4 matplotlib可视化模型
    • 2. 单因子线性回归模型
      • 2.1 Jupyter Notebook的使用
      • 2.2 数据的加载
      • 2.3 数据的赋值
      • 2.4 数据的可视化
      • 2.5 单因子模型的建立
    • 3. 多因子线性回归模型
      • 3.1 数据的加载
      • 3.2 单因子数据可视化集
      • 3.3 建立单因子模型
      • 3.4 评估单因子模型表现
      • 3.5 建立多因子模型
      • 3.6 评估多因子模型表现
      • 3.7 测试数据预测房价
    • 4. 总结

1. 线性回归实战准备

1.1 scikit-learn介绍

sklearn (scikit-learn) 是基于 Python 语言的机器学习工具,是专门针对机器学习应用发展起来的一款开源框架(算法库),可以实现数据预处理、分类、回归、降维、模型选择等常用的机器学习算法。

  • 简单高效的数据挖掘和数据分析工具
  • 可供大家在各种环境中重复使用
  • 建立在 NumPy ,SciPy 和 matplotlib 上
  • 开源,可商业使用 - BSD许可证

Scikit-learn集成了很多机器学习中成熟的算法,容易安装和使用,官方文档也非常详细,但是需要注意的是它不支持Python之外的语言,不支持深度学习与强化学习。

1.2 sklearn求解线性回归

对于线性回归问题的求解,主要目标是寻找到合适的a和b,创建线性回归模型:y = ax + b

from sklearn.linear_model import LinearRegression
lr_model = LinearRegression()
lr_model.fit(x,y)

得到a、b的值

a = lr_model.coef_
b = lr_model.intercept_

对新数据做出预测

predictions = lr_model.predict(x_new)

1.3 模型表现评估

y与y_predict的均方误差 (MSE):

这里的MSE的值越小越好
R方值

R方值越接近1,模型的拟合效果越好

代码的引入:

from sklearn.metrics import mean_squared_error,r2_score
MSE = mean_squared_error(y,y_predict)
R2 = r2_score(y,y_predict)

画图对比y与y_predict,可视化模型表现 (集中度越高越接近直线分布效果越好),代码如下:

from matplotlib import pyplot as plt
plt.scatter(y,y_predict)

1.4 matplotlib可视化模型

我们可以使用matplotlib画出数据的散点图,将与多个因子有关的散点图同时展示出来,代码举例如下:

# 画散点图
import matplotlib.pyplot as plt
plt.scatter(x,y)
# 多张图同时展示
fig1 = plt.subplot(211)
plt.scatter(x1,y1)
fig2 = plt.subplot(212)
plt.scatter(x2,y2)

2. 单因子线性回归模型

2.1 Jupyter Notebook的使用

这里用我们之前创建的AI环境(图中箭头已标示出来),然后在这个环境下登录我们的Jupyter Notebook,登陆之后会自动打开我们设置的浏览器,如下图:
创建一个Python文件,操作如下:

2.2 数据的加载

现在我们基于数据generated_data.csv,

任务:建立线性回归模型,预测x=3.5对应的y值,评估模型表现

# load the data
import pandas as pd
data = pd.read_csv('generated_data.csv')
data.head()

运行结果(以下省略该提示):

print(type(data),data.shape)

2.3 数据的赋值

# data赋值
x = data.loc[:,'x']
y = data.loc[:,'y']
print(x,y)

2.4 数据的可视化

# visual the data
from matplotlib import pyplot as plt
# figsize=(x,y)设置图的尺寸
# plt.figure(figsize=(20,20))
plt.figure()
plt.scatter(x,y)
plt.show()

2.5 单因子模型的建立

# set up a linear regression model
from sklearn.linear_model import LinearRegression
lr_model = LinearRegression()
import numpy as np
x = np.array(x)
x = x.reshape(-1,1)
y = np.array(y)
y = y.reshape(-1,1)
print(type(x),x.shape,type(y),y.shape)

print(type(x),x.shape)

lr_model.fit(x,y)

y_predict = lr_model.predict(x)
print(y_predict)

y_3 = lr_model.predict([[3.5]])
print(y_3)

print(y)

# a\b打印
a = lr_model.coef_
b = lr_model.intercept_
print(a,b)

from sklearn.metrics import mean_squared_error,r2_score
MSE = mean_squared_error(y,y_predict)
R2 = r2_score(y,y_predict)
print(MSE,R2)

plt.figure()
plt.plot(y,y_predict)
plt.show()


可以看到拟合的效果非常好,但是现实生活中这种理想的数据往往是不存在的,因为现实生活中数据量往往是巨大的,且影响y值的因素有很多,往往受到多因子的影响。这个简单的单因子模型只是为了让我们能更好地了解数据的加载、数据的处理、模型的建立、评估等一系列流程,下面的多因子线性回归模型才是我们要理解和掌握的重点。

3. 多因子线性回归模型

3.1 数据的加载

现在我们基于房价数据usa_housing_price.csv进行多因子线性回归模型的建立,首先加载数据

# 数据加载
import pandas as pd
import numpy as np
data = pd.read_csv('usa_housing_price.csv')
data.head()

3.2 单因子数据可视化集

# 单因子数据可视化
%matplotlib inline
from matplotlib import pyplot as plt
fig = plt.figure(figsize=(10,10))
fig1 = plt.subplot(231)
plt.scatter(data.loc[:,'Avg. Area Income'],data.loc[:,'Price'])
plt.title('Price VS Income')

fig2 = plt.subplot(232)
plt.scatter(data.loc[:,'Avg. Area House Age'],data.loc[:,'Price'])
plt.title('Price VS House Age')

fig3 = plt.subplot(233)
plt.scatter(data.loc[:,'Avg. Area Number of Rooms'],data.loc[:,'Price'])
plt.title('Price VS Number of Rooms')

fig4 = plt.subplot(234)
plt.scatter(data.loc[:,'Area Population'],data.loc[:,'Price'])
plt.title('Price VS Area Population')

fig5 = plt.subplot(235)
plt.scatter(data.loc[:,'size'],data.loc[:,'Price'])
plt.title('Price VS size')

# define x and y
x = data.loc[:,'size']
y = data.loc[:,'Price']
y.head()
x = np.array(x).reshape(-1,1)
print(x,x.shape)

3.3 建立单因子模型

# 建立单因子模型
from sklearn.linear_model import LinearRegression
LR1 = LinearRegression()
# 训练模型
LR1.fit(x,y)

# 计算单因子site对应的的price
y_predict_1 = LR1.predict(x)
print(y_predict_1)

3.4 评估单因子模型表现

# 评估模型表现
from sklearn.metrics import mean_squared_error,r2_score
mean_squared_error_1 =  mean_squared_error(y,y_predict_1)
r2_score_1 = r2_score(y,y_predict_1)
print(mean_squared_error_1,r2_score_1)   

fig6 = plt.figure(figsize=(8,5))
plt.scatter(x,y)
plt.plot(x,y_predict_1,'r')
plt.show()

3.5 建立多因子模型

# define x_multi
x_multi = data.drop(['Price'],axis=1)
x_multi

# 多因子线性回归结构模型
LR_multi = LinearRegression()
# 训练模型
LR_multi.fit(x_multi,y)

# 模型预测
y_predict_multi = LR_multi.predict(x_multi)
print(y_predict_multi)

3.6 评估多因子模型表现

# 评估模型表现
mean_squared_error_multi =  mean_squared_error(y,y_predict_multi)
r2_score_multi = r2_score(y,y_predict_multi)
print(mean_squared_error_multi,r2_score_multi)  

print(mean_squared_error_1)

fig7 = plt.figure(figsize=(8,5))
plt.scatter(y,y_predict_multi)

fig8 = plt.figure(figsize=(8,5))
plt.scatter(y,y_predict_1)

3.7 测试数据预测房价

# 用测试数据预测房价
x_test = [86295,4.372543,8.011898,47560.78,231.0471]
print(type(x_test))
x_test = np.array(x_test).reshape(1,-1)
print(x_test)

y_test_predict = LR_multi.predict(x_test)
print(y_test_predict)

4. 总结

可以看出,相较于单因子模型,多因子模型达到了更好的预测效果,R方值为0.91,MSE也有了将近10倍的下降,很好地实现了预测结果的可视化,我们可以直观对比预测价格与实际价格的差异。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服