【機器學習 線性模型】10分鐘瞭解下6種常見的線性模型

無意中發現了一個巨牛的人工智能教程,忍不住分享一下給大家。教程不僅是零基礎,通俗易懂,而且非常風趣幽默,像看小說一樣!覺得太牛了,所以分享給大家。點這裏可以跳轉到教程。人工智能教程

在目前的機器學習領域中,最常見的三種任務就是:迴歸分析、分類分析、聚類分析。那麼什麼是迴歸呢?迴歸分析是一種預測性的建模技術,它研究的是因變量(目標)和自變量(預測器)之間的關係。迴歸分析在機器學習領域應用非常廣泛,例如,商品的銷量預測問題,交通流量預測問題。下面介紹幾種常見的線性迴歸模型。

常用的線性迴歸算法

1、線性迴歸
線性迴歸擬合一個帶係數的線性模型,以最小化數據中的觀測值與線性預測值之間的殘差平方和。

#加載線性模型算法庫
from sklearn import linear_model
# 創建線性迴歸模型的對象
regr = linear_model.LinearRegression()
# 利用訓練集訓練線性模型
regr.fit(X_train, y_train)
# 使用測試集做預測
y_pred = regr.predict(X_test)

2、嶺迴歸

上述的線性迴歸算法使用最小二乘法優化各個係數,對於嶺迴歸來說,嶺迴歸通過對係數進行懲罰(L2範式)來解決普通最小二乘法的一些問題,例如,當特徵之間完全共線性(有解)或者說特徵之間高度相關,這個時候適合用嶺迴歸。

#加載線性模型算法庫
from sklearn.linear_model import Ridge
# 創建嶺迴歸模型的對象
reg = Ridge(alpha=.5)
# 利用訓練集訓練嶺迴歸模型
reg.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1]) 
#輸出各個係數
reg.coef_
reg.intercept_ 

3、Lasso迴歸
Lasso是一個估計稀疏稀疏的線性模型。它在某些情況下很有用,由於它傾向於選擇參數值較少的解,有效地減少了給定解所依賴的變量的數量。Lasso模型在最小二乘法的基礎上加入L1範式作爲懲罰項。

#加載Lasso模型算法庫
from sklearn.linear_model import Lasso
# 創建Lasso迴歸模型的對象
reg = Lasso(alpha=0.1)
# 利用訓練集訓練Lasso迴歸模型
reg.fit([[0, 0], [1, 1]], [0, 1])
"""
Lasso(alpha=0.1, copy_X=True, fit_intercept=True, max_iter=1000,
   normalize=False, positive=False, precompute=False, random_state=None,
   selection='cyclic', tol=0.0001, warm_start=False)
"""
# 使用測試集做預測
reg.predict([[1, 1]])

4、Elastic Net迴歸

Elastic Net 是一個線性模型利用L1範式和L2範式共同作爲懲罰項。這種組合既可以學習稀疏模型,同時可以保持嶺迴歸的正則化屬性。

#加載ElasticNet模型算法庫
from sklearn.linear_model import ElasticNet
#加載數據集
from sklearn.datasets import make_regression
X, y = make_regression(n_features=2, random_state=0)
#創建ElasticNet迴歸模型的對象
regr = ElasticNet(random_state=0)
# 利用訓練集訓練ElasticNet迴歸模型
regr.fit(X, y)
print(regr.coef_) 
print(regr.intercept_) 
print(regr.predict([[0, 0]]))

5、貝葉斯嶺迴歸
貝葉斯嶺迴歸模型和嶺迴歸類似。貝葉斯嶺迴歸通過最大化邊際對數似然來估計參數。

from sklearn.linear_model import BayesianRidge
X = [[0., 0.], [1., 1.], [2., 2.], [3., 3.]]
Y = [0., 1., 2., 3.]
reg = BayesianRidge()
reg.fit(X, Y)

6、SGD迴歸
上述的線性模型通過最小二乘法來優化損失函數,SGD迴歸也是一種線性迴歸,不同的是,它通過隨機梯度下降最小化正則化經驗損失。

import numpy as np
from sklearn import linear_model
n_samples, n_features = 10, 5
np.random.seed(0)
y = np.random.randn(n_samples)
X = np.random.randn(n_samples, n_features)
clf = linear_model.SGDRegressor(max_iter=1000, tol=1e-3)
clf.fit(X, y)
"""
SGDRegressor(alpha=0.0001, average=False, early_stopping=False,
       epsilon=0.1, eta0=0.01, fit_intercept=True, l1_ratio=0.15,
       learning_rate='invscaling', loss='squared_loss', max_iter=1000,
       n_iter=None, n_iter_no_change=5, penalty='l2', power_t=0.25,
       random_state=None, shuffle=True, tol=0.001, validation_fraction=0.1,
       verbose=0, warm_start=False)
"""
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章