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

線性迴歸模型請看上篇文章,本篇文章介紹的是非線性迴歸模型
線性迴歸模型鏈接

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

1、SVR

衆所周知,支持向量機在分類領域應用非常廣泛,支持向量機的分類方法可以被推廣到解決迴歸問題,這個就稱爲支持向量迴歸。支持向量迴歸算法生成的模型同樣地只依賴訓練數據集中的一個子集(和支持向量分類算法類似)。

#加載SVR模型算法庫
from sklearn.svm import SVR
#訓練集
X = [[0, 0], [2, 2]]
y = [0.5, 2.5]
#創建SVR迴歸模型的對象
clf = SVR()
# 利用訓練集訓練SVR迴歸模型
clf.fit(X, y) 
"""
SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1,
    gamma='auto_deprecated', kernel='rbf', max_iter=-1, shrinking=True,
    tol=0.001, verbose=False)
"""
clf.predict([[1, 1]])

2、決策樹迴歸

from sklearn.tree import  DecisionTreeRegressor 
X = [[0, 0], [2, 2]]
y = [0.5, 2.5]
clf = DecisionTreeRegressor()
clf = clf.fit(X, y)
clf.predict([[1, 1]])

3、knn迴歸
在數據標籤是連續變量而不是離散變量的情況下,可以使用KNN迴歸。分配給查詢點的標籤是根據其最近鄰居標籤的平均值計算的。

X = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
from sklearn.neighbors import KNeighborsRegressor
neigh = KNeighborsRegressor(n_neighbors=2)
neigh.fit(X, y) 
print(neigh.predict([[1.5]]))

4、RandomForest迴歸

隨機森林迴歸算法也是一種經典的集成算法之一。

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression
X, y = make_regression(n_features=4, n_informative=2,
                       random_state=0, shuffle=False)
regr = RandomForestRegressor(max_depth=2, random_state=0,
                             n_estimators=100)
regr.fit(X, y)
print(regr.feature_importances_)
print(regr.predict([[0, 0, 0, 0]]))

5、XGBoost迴歸
XGBoost近些年在學術界取得的成果連連捷報,基本所有的機器學習比賽的冠軍方案都使用了XGBoost算法

import xgboost as xgb
xgb_model = xgb.XGBRegressor(max_depth = 3,
                             learning_rate = 0.1,
                             n_estimators = 100,
                             objective = 'reg:linear',
                             n_jobs = -1)

xgb_model.fit(X_train, y_train,
              eval_set=[(X_train, y_train)], 
              eval_metric='logloss',
              verbose=100)
y_pred = xgb_model.predict(X_test)
print(mean_squared_error(y_test, y_pred))

6、神經網絡MLP迴歸
神經網絡使用slearn中MLPRegressor類實現了一個多層感知器(MLP),它使用在輸出層中沒有激活函數的反向傳播進行訓練,也可以將衡等函數視爲激活函數。因此,它使用平方誤差作爲損失函數,輸出是一組連續的值。

from sklearn.neural_network import MLPRegressor
mlp=MLPRegressor()
mlp.fit(X_train,y_train)
"""
MLPRegressor(activation='relu', alpha=0.0001, batch_size='auto', beta_1=0.9,
       beta_2=0.999, early_stopping=False, epsilon=1e-08,
       hidden_layer_sizes=(100,), learning_rate='constant',
       learning_rate_init=0.001, max_iter=200, momentum=0.9,
       n_iter_no_change=10, nesterovs_momentum=True, power_t=0.5,
       random_state=None, shuffle=True, solver='adam', tol=0.0001,
       validation_fraction=0.1, verbose=False, warm_start=False)
"""
y_pred = mlp.predict(X_test)

7、LightGBM迴歸
LightGBM作爲另一個使用基於樹的學習算法的梯度增強框架。在算法競賽也是每逢必用的神器,且要想在競賽取得好成績,LightGBM是一個不可或缺的神器。相比於XGBoost,LightGBM有如下優點,訓練速度更快,效率更高效;低內存的使用量。

import lightgbm as lgb
gbm = lgb.LGBMRegressor(num_leaves=31,
                        learning_rate=0.05,
                        n_estimators=20)
gbm.fit(X_train, y_train,
        eval_set=[(X_train, y_train)], 
        eval_metric='logloss',
        verbose=100)
y_pred = gbm.predict(X_test)
print(mean_squared_error(y_test, y_pred))

8、GBDT迴歸
集成算法Boosting的一種,基於決策樹的梯度提升樹迴歸算法


# GBDT超參數調優
params = {
'n_estimators': 400, 
'max_depth': 11,
'learning_rate': 0.06,
 'loss': 'ls',
 'subsample':0.8
 }
gbdt=GradientBoostingRegressor(**params)
# 模型訓練
gbdt.fit(X_train, y_train)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章