回歸是統計學(xué)中最有力的工具之一。
機器學(xué)習監督學(xué)習
算法分為分類(lèi)算法和回歸算法兩種,其實(shí)就是根據類(lèi)別標簽分布類(lèi)型為離散型、連續性而定義的。顧名思義,分類(lèi)算法用于離散型分布預測,如前面講過(guò)的KNN、決策樹(shù)、樸素貝葉斯、adaboost、SVM、Logistic回歸都是分類(lèi)算法;回歸算法用于連續型分布預測,針對的是數值型的樣本,使用回歸,可以在給定輸入的時(shí)候預測出一個(gè)數值,這是對分類(lèi)方法的提升,因為這樣可以預測連續型數據而不僅僅是離散的類(lèi)別標簽。
回歸的目的就是建立一個(gè)回歸方程用來(lái)預測目標值,回歸的求解就是求這個(gè)回歸方程的回歸系數。預測的方法當然十分簡(jiǎn)單,回歸系數乘以輸入值再全部相加就得到了預測值。
這里說(shuō)一下線(xiàn)性回歸模型。
1、若X與y之間存在著(zhù)較強的相關(guān)關(guān)系,則有y=a+bX+c.
2、若a與b的值已知,則給出相應的X值。我們可以得到相應的y的預測值。
參數:
截距項a
斜率b
誤差項c
例子:商品銷(xiāo)量s關(guān)于電視廣告費用t的回歸方程:s=10+3.4*t(單位:萬(wàn)元)
接下來(lái)為帶來(lái)的一個(gè)關(guān)于買(mǎi)房子的例子。注:這個(gè)例子出處:http://
Python.jobbole.com/81215/ ,并非我的原創(chuàng ),這里給出鏈接。我不過(guò)添加了一些注釋和總結,希望大家珍惜原創(chuàng )。
1) 預測房子價(jià)格
我們想預測特定房子的價(jià)值,預測依據是房屋面積。
我們有下面的數據集:
輸入編號平方英尺 價(jià)格
11506450
22007450
32508450
43009450
535011450
640015450
760018450
步驟1:在
線(xiàn)性回歸中,我們都知道必須在數據中找出一種線(xiàn)性關(guān)系,以使我們可以得到a和b。 我們的假設方程式如下所示:
y(X)=a+bX
其中: y(X)是關(guān)于特定平方英尺的價(jià)格值(我們要預測的值),意思是價(jià)格是平方英尺的線(xiàn)性函數; a是一個(gè)常數; b是回歸系數。那么現在開(kāi)始編程:
打開(kāi)你最喜愛(ài)的文本編輯器,并命名為predict_house_price.py。我們在我們的程序中要用到下面的包,所以把下面代碼復制到predict_house_price.py文件中去。
[python]
# Required Packages
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model
運行一下你的代碼。如果你的程序沒(méi)錯,那步驟1基本做完了。如果你遇到了某些錯誤,這意味著(zhù)你丟失了一些包。這時(shí)需要安裝這些包。這里我假設現在你的程序沒(méi)錯了,我們繼續……
步驟2
我把數據存儲成一個(gè).csv文件,名字為input_data.csv 所以讓我們寫(xiě)一個(gè)函數把數據轉換為X值(平方英尺)、Y值(價(jià)格)。這一步很簡(jiǎn)單的,可以先用Excel來(lái)存儲數據,記得寫(xiě)上列名。之后保存的時(shí)候另存為cvs格式即可。
[python]
# 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打印出來(lái):
[html]
[[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擬合為線(xiàn)性回歸模型。我們要寫(xiě)一個(gè)函數,輸入為X_parameters、Y_parameter和你要預測的平方英尺值,返回a、b和預測出的價(jià)格值。這里使用的是scikit-learn機器學(xué)習算法包。該算法包是目前python實(shí)現的機器算法包最好的一個(gè)。
[python]
<pre name="code" class="python">
[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行:首先,創(chuàng )建一個(gè)線(xiàn)性模型,用我們的X_parameters和Y_parameter訓練它。第8-12行:我們創(chuàng )建一個(gè)名稱(chēng)為predictions的字典,存著(zhù)a、b和預測值,并返回predictions字典為輸出。所以讓我們調用一下我們的函數,要預測的平方英尺值為700。
[python]
<pre name="code" class="html">
[python]
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的值。 我們得到預測的價(jià)格值為21915.4255——意味著(zhù)我們已經(jīng)把預測房子價(jià)格的工作做完了!為了驗證,我們需要看看我們的數據怎么擬合線(xiàn)性回歸。所以我們需要寫(xiě)一個(gè)函數,輸入為X_parameters和Y_parameters,顯示出數據擬合的直線(xiàn)。
[html]
# 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)腳本輸出:
后話(huà):這里使用的是scikit-learn機器學(xué)習算法包。該算法包是目前python實(shí)現的機器算法包最好的一個(gè)。本文的代碼我都親測通過(guò)了。下一次我會(huì )總結多元線(xiàn)性回歸的算法實(shí)現。