線性迴歸
線性迴歸是利用數理統計中迴歸分析來確定兩種或兩種以上變量間相互依賴的定量關係的一種統計分析方法
線性迴歸利用稱爲線性迴歸方程的最小平方函數對一個或多個自變量和因變量之間關係進行建模。這種函數是一個或多個稱爲迴歸係數的模型參數的線性組合。只有一個自變量的情況稱爲簡單迴歸,大於一個自變量情況叫做多元迴歸
使用形如 的線性模型擬合數據輸入和輸出之間的映射關係
線性迴歸的實際用途
如果目標是預測或者映射,線性迴歸可以用來對觀測數據集的 和 的值擬合出一個預測模型,當完成這樣一個模型後,對於一個新的 ,可以通過這個模型預測出 值。
線性迴歸實戰
對房屋成交信息建立迴歸方程,並根據迴歸方程對房屋價格進行預測
數據集(部分截取)如下(每一行第一個數據代表房屋面積,第二個數據代表房屋價格):
…
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
# 讀取數據集
datasets_X = []
datasets_Y = []
fr = open('prices.txt','r')
lines = fr.readlines()
for line in lines:
items = line.strip().split(',')
datasets_X.append(int(items[0]))
datasets_Y.append(int(items[1]))
length = len(datasets_X)
datasets_X = np.array(datasets_X).reshape([length,1])
datasets_Y = np.array(datasets_Y)
minX = min(datasets_X)
maxX = max(datasets_X)
X = np.arange(minX,maxX).reshape([-1,1])
linear = linear_model.LinearRegression()
#迴歸模型建立
linear.fit(datasets_X, datasets_Y)
#模型訓練,擬合數據
# 圖像中顯示
plt.scatter(datasets_X, datasets_Y, color = 'red')
plt.plot(X, linear.predict(X), color = 'blue')
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()
通過迴歸方程擬合的直線與原有數據點的關係如下所示:
多項式迴歸
多項式迴歸是研究一個因變量與一個或多個自變量間多項式的迴歸分析方法。如果自變量只有一個,稱爲一元多項式迴歸,如果自變量有多個,稱爲多元多項式迴歸。
在一元迴歸分析中,如果因變量 與自變量 的關係爲非線性的,但是又找不到適當的函數曲線來擬合,則可以採用一元多項式迴歸。
多項式迴歸的最大優點就是可以通過增加 的高次項對實測點進行逼近,直到滿意爲止。
事實上,多項式迴歸可以處理相當一類非線性問題,它在迴歸分析中佔有重要的地位,因爲任意函數都可以分段用多項式來逼近。
不同於線性迴歸,多項式迴歸是使用曲線擬合數據的輸入與輸出的映射關係。
多項式迴歸實戰
對房屋數據集進行多項式迴歸,達到更好的擬合效果
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures
# 讀取數據集
datasets_X = []
datasets_Y = []
fr = open('prices.txt','r')
lines = fr.readlines()
for line in lines:
items = line.strip().split(',')
datasets_X.append(int(items[0]))
datasets_Y.append(int(items[1]))
length = len(datasets_X)
datasets_X = np.array(datasets_X).reshape([length,1])
datasets_Y = np.array(datasets_Y)
minX = min(datasets_X)
maxX = max(datasets_X)
X = np.arange(minX,maxX).reshape([-1,1])
poly_reg = PolynomialFeatures(degree = 2)
X_poly = poly_reg.fit_transform(datasets_X)
lin_reg_2 = linear_model.LinearRegression()
lin_reg_2.fit(X_poly, datasets_Y)
# 圖像中顯示
plt.scatter(datasets_X, datasets_Y, color = 'red')
plt.plot(X, lin_reg_2.predict(poly_reg.fit_transform(X)), color = 'blue')
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()