Python实现机器学习一(实现一元线性回归)
2015-10-24 16:29
891 查看
回归是统计学中最有力的工具之一。机器学习监督学习算法分为分类算法和回归算法两种,其实就是根据类别标签分布类型为离散型、连续性而定义的。顾名思义,分类算法用于离散型分布预测,如前面讲过的KNN、决策树、朴素贝叶斯、adaboost、SVM、Logistic回归都是分类算法;回归算法用于连续型分布预测,针对的是数值型的样本,使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签。
回归的目的就是建立一个回归方程用来预测目标值,回归的求解就是求这个回归方程的回归系数。预测的方法当然十分简单,回归系数乘以输入值再全部相加就得到了预测值。
这里说一下线性回归模型。
1、若X与y之间存在着较强的相关关系,则有y=a+bX+c.
2、若a与b的值已知,则给出相应的X值。我们可以得到相应的y的预测值。
参数:
截距项a
斜率b
误差项c
例子:商品销量s关于电视广告费用t的回归方程:s=10+3.4*t(单位:万元)
接下来为带来的一个关于买房子的例子。注:这个例子出处:http://python.jobbole.com/81215/ ,并非我的原创,这里给出链接。我不过添加了一些注释和总结,希望大家珍惜原创。
我们想预测特定房子的价值,预测依据是房屋面积。
我们有下面的数据集:
步骤1:在线性回归中,我们都知道必须在数据中找出一种线性关系,以使我们可以得到a和b。
我们的假设方程式如下所示:
y(X)=a+bX
其中: y(X)是关于特定平方英尺的价格值(我们要预测的值),意思是价格是平方英尺的线性函数; a是一个常数; b是回归系数。那么现在开始编程:
打开你最喜爱的文本编辑器,并命名为predict_house_price.py。我们在我们的程序中要用到下面的包,所以把下面代码复制到predict_house_price.py文件中去。
步骤2
我把数据存储成一个.csv文件,名字为input_data.csv 所以让我们写一个函数把数据转换为X值(平方英尺)、Y值(价格)。这一步很简单的,可以先用Excel来存储数据,记得写上列名。之后保存的时候另存为cvs格式即可。
第3行:将.csv数据读入Pandas数据帧。第6-9行:把Pandas数据帧转换为X_parameter和Y_parameter数据,并返回他们。所以,让我们把X_parameter和Y_parameter打印出来:
步骤3
现在让我们把X_parameter和Y_parameter拟合为线性回归模型。我们要写一个函数,输入为X_parameters、Y_parameter和你要预测的平方英尺值,返回a、b和预测出的价格值。这里使用的是scikit-learn机器学习算法包。该算法包是目前python实现的机器算法包最好的一个。
第5-6行:首先,创建一个线性模型,用我们的X_parameters和Y_parameter训练它。第8-12行:我们创建一个名称为predictions的字典,存着a、b和预测值,并返回predictions字典为输出。所以让我们调用一下我们的函数,要预测的平方英尺值为700。
脚本输出:
这里,Intercept value(截距值)就是a的值,coefficient value(系数)就是b的值。 我们得到预测的价格值为21915.4255——意味着我们已经把预测房子价格的工作做完了!为了验证,我们需要看看我们的数据怎么拟合线性回归。所以我们需要写一个函数,输入为X_parameters和Y_parameters,显示出数据拟合的直线。
那么调用一下show_linear_line函数吧:show_linear_line(X,Y)
脚本输出:
后话:这里使用的是scikit-learn机器学习算法包。该算法包是目前python实现的机器算法包最好的一个。本文的代码我都亲测通过了。下一次我会总结多元线性回归的算法实现。
回归的目的就是建立一个回归方程用来预测目标值,回归的求解就是求这个回归方程的回归系数。预测的方法当然十分简单,回归系数乘以输入值再全部相加就得到了预测值。
这里说一下线性回归模型。
1、若X与y之间存在着较强的相关关系,则有y=a+bX+c.
2、若a与b的值已知,则给出相应的X值。我们可以得到相应的y的预测值。
参数:
截距项a
斜率b
误差项c
例子:商品销量s关于电视广告费用t的回归方程:s=10+3.4*t(单位:万元)
接下来为带来的一个关于买房子的例子。注:这个例子出处:http://python.jobbole.com/81215/ ,并非我的原创,这里给出链接。我不过添加了一些注释和总结,希望大家珍惜原创。
1) 预测房子价格
我们想预测特定房子的价值,预测依据是房屋面积。我们有下面的数据集:
输入编号 | 平方英尺 | 价格 |
---|---|---|
1 | 150 | 6450 |
2 | 200 | 7450 |
3 | 250 | 8450 |
4 | 300 | 9450 |
5 | 350 | 11450 |
6 | 400 | 15450 |
7 | 600 | 18450 |
我们的假设方程式如下所示:
y(X)=a+bX
其中: y(X)是关于特定平方英尺的价格值(我们要预测的值),意思是价格是平方英尺的线性函数; a是一个常数; b是回归系数。那么现在开始编程:
打开你最喜爱的文本编辑器,并命名为predict_house_price.py。我们在我们的程序中要用到下面的包,所以把下面代码复制到predict_house_price.py文件中去。
# Required Packages 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来存储数据,记得写上列名。之后保存的时候另存为cvs格式即可。
# Function to get data def get_data(file_name): data = pd.read_csv(file_name) #here ,use pandas to read cvs file. X_parameter = [] Y_parameter = [] for single_square_feet ,single_price_value in zip(data['square_feet'],data['price']):#遍历数据, X_parameter.append([float(single_square_feet)])#存储在相应的list列表中 Y_parameter.append(float(single_price_value)) return X_parameter,Y_parameter
第3行:将.csv数据读入Pandas数据帧。第6-9行:把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实现的机器算法包最好的一个。
<pre name="code" class="python">
#Function for Fitting our data to Linear model def linear_model_main(X_parameters,Y_parameters,predict_value): # Create linear regression object regr = linear_model.LinearRegression() regr.fit(X_parameters, Y_parameters) #train model predict_outcome = regr.predict(predict_value) predictions = {} predictions['intercept'] = regr.intercept_ predictions['coefficient'] = regr.coef_ predictions['predicted_value'] = predict_outcome return predictions
第5-6行:首先,创建一个线性模型,用我们的X_parameters和Y_parameter训练它。第8-12行:我们创建一个名称为predictions的字典,存着a、b和预测值,并返回predictions字典为输出。所以让我们调用一下我们的函数,要预测的平方英尺值为700。
<pre name="code" class="html">
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] [Finished in 0.7s]
这里,Intercept value(截距值)就是a的值,coefficient value(系数)就是b的值。 我们得到预测的价格值为21915.4255——意味着我们已经把预测房子价格的工作做完了!为了验证,我们需要看看我们的数据怎么拟合线性回归。所以我们需要写一个函数,输入为X_parameters和Y_parameters,显示出数据拟合的直线。
# Function to show the resutls of linear fit model def show_linear_line(X_parameters,Y_parameters): # Create linear regression object 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)
脚本输出:
后话:这里使用的是scikit-learn机器学习算法包。该算法包是目前python实现的机器算法包最好的一个。本文的代码我都亲测通过了。下一次我会总结多元线性回归的算法实现。
相关文章推荐
- RHEL6.7下,安装Python3.5,进行编程开发
- Python下关于JSON的一些事儿
- leetcode之Set Matrix Zeroes
- What does the yield keyword do in Python?
- python 自动登录网站
- python socket编程
- Python机器学习库scikit-learn实践
- Python - 基础知识 - 条件判断
- python socket编程详细介绍
- Python repr() 或str() 函数
- Python内置的字符串处理函数整理
- 使用IronPython给.Net程序加点料
- Python if elif else语句
- Python科学计算库演示
- Python __name__ == '__main__' 介绍
- 为Python配置Vim编辑器(GUI/非GUI皆可)
- Python时间戳和日期的相互转换
- 用python获取气象数据开放平台信息
- python numpy.shape 和 numpy.reshape函数
- python numpy.shape 和 numpy.reshape函数