Python 数据挖掘与机器学习实战 (59):回归分析介 3.3

阅读数:1 2020 年 1 月 11 日 17:04

Python数据挖掘与机器学习实战(59):回归分析介 3.3

(用 Python 实现一元线性回归)

内容简介
本书作为数据挖掘和机器学习的读物,基于真实数据集进行案例实战,使用 Python 数据科学库,从数据预处理开始一步步介绍数据建模和数据挖掘的过程。书中主要介绍了数据挖掘的基础知识、基本工具和实践方法,通过循序渐进地讲解算法,带领读者轻松踏上数据挖掘之旅。本书采用理论与实践相结合的方式,呈现了如何使用逻辑回归进行环境数据检测,如何使用 HMM 进行中文分词,如何利用卷积神经网络识别雷达剖面图,如何使用循环神经网络构建聊天机器人,如何使用朴素贝叶斯算法进行破产预测,如何使用 DCGAN 网络进行人脸生成等。本书也涉及神经网络、在线学习、强化学习、深度学习和大数据处理等内容。
本书以人工智能主流编程语言 Python 3 版作为数据分析与挖掘实战的应用工具,从 Pyhton 的基础语法开始,陆续介绍了 NumPy 数值计算、Pandas 数据处理、Matplotlib 数据可视化、爬虫和 Sklearn 数据挖掘等内容。全书共涵盖 16 个常用的数据挖掘算法和机器学习实战项目。通过学习本书内容,读者可以掌握数据分析与挖掘的理论知识及实战技能。
本书内容丰富,讲解由浅入深,特别适合对数据挖掘和机器学习算法感兴趣的读者阅读,也适合需要系统掌握深度学习的开发人员阅读,还适合 Python 程序员及人工智能领域的开发人员阅读。编程爱好者、高校师生及培训机构的学员也可以将本书作为兴趣读物或教材使用。

一个简单的线性回归的例子就是房子价值预测问题。一般来说,房子越大,房屋的价值越高。于是可以推断出,房子的价值是与房屋面积有关的,如图 3-1 所示,获取的数据集如表 3-1 所示。

Python数据挖掘与机器学习实战(59):回归分析介 3.3

图 3-1 通过房屋面积预测房子的价格
表 3-1 预测房屋面积数据集示例

|编号||平方英尺|价格(元 / 平方英尺)|
|-|-|-|
|1|150|6450|
|2|200|7450|
|3|250|8450|
|4|300|9450|
|5|350|11450|
|6|400|15450|
|7|600|18450|

(1)在线性回归中,必须在数据中找出一种线性关系,以使我们可以得到 ab。假设方程式如下:

y(X)=a+bX(36)

其中:y(x) 是关于特定平方英尺的价格值(要预测的值),意思是价格是平方英尺的线性函数。a 是一个常数;b 是回归系数。那么现在开始编程:

打开文本编辑器,并命名为 predict_house_price.py。在程序中要用到下面的包,将下面代码复制到 predict_house_price.py 文件中。

复制代码
#需要的包
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model

运行代码,如果程序没有报错,步骤(1)完成。如果遇到了某些错误,则意味着丢失了一些包。这时需要安装这些包。

(2)把数据存储成一个 CSV 文件,命名为 input_data.csv,需要编写一个函数把数据转换为 X 值(平方英尺)、Y 值(价格)。这一步很简单,可以先用 Excel 来存储数据,记得写上列名。之后保存的时候另存为 CSV 格式即可。

复制代码
01 # 读取数据函数
02 def get_data(file_name):
03 data = pd.read_csv(file_name) #读取 cvs 文件
04 X_parameter = []
05 Y_parameter = []
06 for single_square_feet ,single_price_value in zip(data['square_feet'],
data['price']):
07 #遍历数据
08 X_parameter.append([float(single_square_feet)]) #存储在相应的 list 列表中
09 Y_parameter.append(float(single_price_value)) #存储在相应的 list 列表中
10 return X_parameter,Y_parameter

代码中,第 3 行将.csv 数据读入 Pandas 数据帧;第 6~10 行把 Pandas 数据帧转换为 X_parameter 和 Y_parameter 数据,并返回结果。所以把 X_parameter 和 Y_parameter 打印出来:

复制代码
[[150.0], [200.0], [250.0], [300.0], [350.0], [400.0], [600.0]]
[6450.0, 7450.0, 8450.0, 9450.0, 11450.0, 15450.0, 18450.0]

(3)现在把 X_parameter 和 Y_parameter 拟合为线性回归模型。需要写一个函数,输入为 X_parameters、Y_parameter 和要预测的平方英尺值,返回 a、b 和预测出的价格值。这里使用的是 scikit-learn 机器学习算法包。该算法包是目前 Python 实现的机器算法包中最好用的一个。

复制代码
01 #将数据拟合到线性模型
02 def linear_model_main(X_parameters,Y_parameters,predict_value):
03 #创建线性回归对象
04 regr = linear_model.LinearRegression()
05 regr.fit(X_parameters, Y_parameters) #训练模型
06 predict_outcome = regr.predict(predict_value)
07 predictions = {}
08 predictions['intercept'] = regr.intercept_
09 predictions['coefficient'] = regr.coef_
10 predictions['predicted_value'] = predict_outcome
11 return predictions

代码中,第 5 行和第 6 行中首先创建一个线性模型,用\X_parameters 和 Y_parameter 训练它;第 8~12 行中创建一个名称为 predictions 的字典,存着 a、b 和预测值,并返回 predictions 字典为输出。所以调用以下预测函数,得到预测的平方英尺值为 700。

复制代码
X,Y = get_data('input_data.csv')
predictvalue = 700
result = linear_model_main(X,Y,predictvalue)
print ("Intercept value " , result['intercept'])
print ("coefficient" , result['coefficient'])
print ("Predicted value: ",result['predicted_value'])

脚本输出如下:

复制代码
Intercept value 1771.80851064
coefficient [ 28.77659574]
Predicted value: [ 21915.42553191]

这里,Intercept value(截距值)就是 a 的值,coefficient value(系数)就是 b 的值。得到预测的价格值为 21915.4255——这意味着预测房子价格的工作做完了。为了验证,需要看看数据是否拟合线性回归,所以需要写一个函数,输入为 X_parameters 和 Y_parameters,显示数据拟合的直线。

复制代码
# 显示线性拟合模型的结果
def show_linear_line(X_parameters,Y_parameters):
#创建线性回归对象
regr = linear_model.LinearRegression()
regr.fit(X_parameters, Y_parameters)
plt.scatter(X_parameters,Y_parameters,color='blue')
plt.plot(X_parameters,regr.predict(X_parameters),color='red',linewidth=4)
plt.xticks(())
plt.yticks(())
plt.show()

那么调用 show_linear_line 函数:show_linear_line(X,Y),效果如图 3-2 所示。从图中可以看到直线基本可以拟合所有的数据点。

Python数据挖掘与机器学习实战(59):回归分析介 3.3

图 3-2 一元线性回归拟合效果图

Python数据挖掘与机器学习实战(59):回归分析介 3.3

购书地址 https://item.jd.com/12623592.html?dist=jd

评论

发布