有監督學習 => 學習樣本為 :d=
(xi,
yi)n
i=1 輸出/**的結果yi為連續值變數
需要學習對映ƒ :
χ →
y
假定輸入x和輸出y之間有線性相關關係
對於給定的x,**其輸出y^
=f(x
)=wt
x+b(可以利用最小二乘法對w和b進行估計)
根據自變數個數可以將線性回歸主要分為兩種:一元線性回歸和多元線性回歸。
一元線性回歸只有乙個自變數,而多元線性回歸有多個自變數。擬合多元線性回歸的時候,可以利用多項式回歸或曲線回歸。
使用sklearn自帶的房價資料庫上使用線性回歸,多項式回歸
from sklearn import datasets
boston = datasets.load_boston() # 載入房價資料
x = boston.data
y = boston.target
print (x
.shape)
print (y
.shape)
輸出:
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y ,test_size = 1/3.,random_state = 8)
from sklearn.linear_model import linearregression
from sklearn.model_selection import cross_val_score
# 線性回歸
lr = linearregression(normalize=true,n_jobs=2)
scores = cross_val_score(lr,x_train,y_train,cv=10,scoring='neg_mean_squared_error') #計算均方誤差
print (scores.mean())
lr.fit(x_train,y_train)
lr.score(x_test,y_test)
輸出:
lr_featurizer = polynomialfeatures(degree=k) # 用於產生多項式 degree:最高次項的次數
print ('-----%d-----' % k)
x_pf_train = lr_featurizer.fit_transform(x_train)
x_pf_test = lr_featurizer.transform(x_test)
pf_scores = cross_val_score(lr,x_pf_train,y_train,cv=10,scoring='neg_mean_squared_error')
print (pf_scores.mean())
lr.fit(x_pf_train,y_train)
print (lr.score(x_pf_test,y_test))
print (lr.score(x_pf_train,y_train))
輸出:
從上面的結果可以看出,當k=1時,為線性回歸;
當k=2時,效果比線性回歸好一點;
當k=3時,出現過擬合
lasson回歸
# 正則化解決k=3的過擬合現象
lr_featurizer = polynomialfeatures(degree=3) # 用於產生多項式 degree:最高次項的次數
x_pf_train = lr_featurizer.fit_transform(x_train)
x_pf_test = lr_featurizer.transform(x_test)
# lasso回歸:(也叫線性回歸的l1正則化)
from sklearn.linear_model import lasso
for a in [i/10000
for i in range(0,6)]:
print ('----%f-----'% a)
lasso = lasso(alpha=a,normalize=true)
pf_scores = cross_val_score(lasso,x_pf_train,y_train,cv=10,scoring='neg_mean_squared_error')
print (pf_scores.mean())
lasso.fit(x_pf_train,y_train)
print (lasso.score(x_pf_test,y_test))
print (lasso.score(x_pf_train,y_train))
輸出:
從上面的結果可以看出,lasson正則化處理後,模型的評價會提高很多
嶺回歸
# 正則化解決k=3的過擬合現象
lr_featurizer = polynomialfeatures(degree=3) # 用於產生多項式 degree:最高次項的次數
x_pf_train = lr_featurizer.fit_transform(x_train)
x_pf_test = lr_featurizer.transform(x_test)
from sklearn.linear_model import ridge
# 嶺回歸
for a in [0,0.005]:
print ('----%f-----'% a)
ridge = ridge(alpha=a,normalize=true)
pf_scores = cross_val_score(ridge,x_pf_train,y_train,cv=10,scoring='neg_mean_squared_error')
print (pf_scores.mean())
ridge.fit(x_pf_train,y_train)
print (ridge.score(x_pf_test,y_test))
print (ridge.score(x_pf_train,y_train))
輸出:
從上面的結果可以看出,對比alpha=0 和 alpha = 0.0005的情況,發現ridge正則化處理後,模型的評價會提高很多。
Python機器學習演算法之線性回歸
1.假設銀行貸款,工資和年齡決定了你的貸款額度。這時候我們就需要找到工資,年齡和額度之間的關聯。2.在x,y,z軸中我們要找到乙個擬合面,使得x,y,z的值盡可能的在擬合面上。x1表示工資,x2表示年齡。1表示工資的引數,2表示年齡的引數,0 表示偏執項。3.由上面公式可以得出 4.誤差定義 真實值...
機器學習之線性回歸
訓練樣例 x y 輸入變數 特徵 x ps n 1行,1 列 輸出變數 目標變數 y訓練樣例總數 m 特徵維度 n第 i 個訓練樣例 x i y i 所有訓練樣例的輸入變數組成的矩陣 x ps m行,n 1 列,每行是 x i t 所有訓練樣例的輸出變數組成的矩陣 y ps m行,1 列 下表是某地...
機器學習之線性回歸
線性回歸就是用線性方程去擬合一組資料,x 的最高端是1,用方程可以表示為 h x 0 1x1 n xn我們令 x0 1則上式可以改寫為 h x i 0n ixi tx 既然是擬合的模型,則肯定會存在不符合該模型的點,第 i 個點的真實值與模型 的值之間的差稱為誤差 e h x i y i 假設總共有...