7.機器學習sklearn-------線性迴歸(房價與房屋尺寸關係的線性擬合)
1.基本概念
線性迴歸(Linear Regression)是利用數理統計中迴歸分析, 來確定兩種或兩種以上變數間相互依賴的定量關係的一種統計分 析方法。
線性迴歸利用稱為線性迴歸方程的最小平方函式對一個或多個自變數和因變數之間關係進行建模。這種函式是一個或多個稱為回 歸係數的模型引數的線性組合。只有一個自變數的情況稱為簡單 迴歸,大於一個自變數情況的叫做多元迴歸。
2.用途
線性迴歸有很多實際的用途,分為以下兩類:
1.如果目標是預測或者對映,線性迴歸可以用來對觀測資料集的y和X的值擬合出一個預測模型。當完成這樣一個模型以後,對於一個新增的X值, 在沒有給定與它相配對的y的情況下,可以用這個擬合過的模型預測出一個 y值。
2..給定一個變數y和一些變數X1,⋯,Xp,這些變數有可能與y相關,線 性迴歸分析可以用來量化y與Xj之間相關性的強度,評估出與y不相關的Xj, 並識別出哪些Xj的子集包含了關於y的冗餘資訊。
3.例項
與房價密切相關的除了單位的房價,還有房屋的尺寸。我們可以根 據已知的房屋成交價和房屋的尺寸進行線性迴歸,繼而可以對已知房屋尺 寸,而未知房屋成交價格的例項進行成交價格的預測。
目標:對房屋成交資訊建立迴歸方程,並依據迴歸方程對房屋價格進行預測
4.資料
為了方便展示,成交資訊只使用 了房屋的面積以及對應的成交價格。 其中:
• 房屋面積單位為平方英尺(ft2)
• 房屋成交價格單位為萬
5.可行性分析
• 簡單而直觀的方式是通過資料的視覺化直接觀察房屋成交價格與房 屋尺寸間是否存線上性關係。
• 對於本實驗的資料來說,散點圖就可以很好的將其在二維平面中進 行視覺化表示。
下圖為資料的散點圖,其中橫座標為房屋面積,縱座標為房屋的成 交價格。可以看出,靠近座標左下 角部分的點,表示房屋尺寸較小的 房子,其對應的房屋成交價格也相 對較低。同樣的,靠近座標右上部 分的點對應於大尺寸高價格的房 屋。從總體來看,房屋的面積和成 交價格基本成正比。
6.實驗過程
使用演算法:線性迴歸
實現步驟: 1.建立工程並匯入sklearn包
2.載入訓練資料,建立迴歸方程
3.視覺化處理
呼叫sklearn.linear_model.LinearRegression()所需引數:
• fit_intercept : 布林型引數,表示是否計算該模型截距。可選引數。
• normalize : 布林型引數,若為True,則X在迴歸前進行歸一化。可選引數。預設值為False。
• copy_X : 布林型引數,若為True,則X將被複制;否則將被覆蓋。可選引數。預設值為True。
• n_jobs : 整型引數,表示用於計算的作業數量;若為-1,則用所有的CPU。可選引數。預設值為1。
線性迴歸fit函式用於擬合輸入輸出資料,呼叫形式為linear.fit(X,y, sample_weight=None):
• X : X為訓練向量;
• y : y為相對於X的目標向量;
• sample_weight : 分配給各個樣本的權重陣列,一般不需要使用,可省略。
#表示matplotlib的pyplot子庫,它提供了和matlab類似的繪圖API import matplotlib.pyplot as plt #表示可以呼叫sklearn中的 linear_model模組進行線性迴歸。 from sklearn import linear_model import numpy as np #建立datasets_X和datasets_Y用來儲存資料中的房屋尺寸和房屋成交價格。 datasets_X =[] datasets_Y =[] fr =open('prices.txt','r') #一次讀取整個檔案。 lines =fr.readlines() #逐行進行操作,迴圈遍歷所有資料 for line in lines: #去除資料檔案中的逗號 items =line.strip().split(',') #將讀取的資料轉換為int型,並分別寫入datasets_X和datasets_Y。 datasets_X.append(int(items[0])) datasets_Y.append(int(items[1])) #求得datasets_X的長度,即為資料的總數。 length =len(datasets_X) #將datasets_X轉化為陣列, 並變為二維,以符合線性回 歸擬合函式輸入引數要求 datasets_X= np.array(datasets_X).reshape([length,1]) #將datasets_Y轉化為陣列 datasets_Y=np.array(datasets_Y) minX =min(datasets_X) maxX =max(datasets_X) #以資料datasets_X的最大值和最小值為範圍,建立等差數列,方便後續畫圖。 X=np.arange(minX,maxX).reshape([-1,1]) linear =linear_model.LinearRegression() linear.fit(datasets_X,datasets_Y)#呼叫線性迴歸模組,建立迴歸方程,擬合數據 #查看回歸方程係數 print('Cofficients:',linear.coef_) #查看回歸方程截距 print('intercept',linear.intercept_) #3.視覺化處理 #scatter函式用於繪製資料 點,這裡表示用紅色繪製資料點; plt.scatter(datasets_X,datasets_Y,color='red') #plot函式用來繪製直線,這 裡表示用藍色繪製迴歸線; #xlabel和ylabel用來指定橫縱座標的名稱 plt.plot(X,linear.predict(X),color='blue') plt.xlabel('Area') plt.ylabel('Price') plt.show()
執行結果:
Cofficients: [0.14839484] intercept 43.92337096187816
通過迴歸方程擬合的直線與原 有資料點的關係如下圖所示,依據該回歸方程即可通過房屋的尺寸, 來預測房屋的成交價格。