0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何幫你的回歸問題選擇最合適的機(jī)器學(xué)習(xí)算法

lviY_AI_shequ ? 來源:未知 ? 2019-05-03 09:39 ? 次閱讀

在目前的機(jī)器學(xué)習(xí)領(lǐng)域中,最常見的三種任務(wù)就是:回歸分析、分類分析、聚類分析。在之前的文章中,我曾寫過一篇<15分鐘帶你入門sklearn與機(jī)器學(xué)習(xí)——分類算法篇>。那么什么是回歸呢?回歸分析是一種預(yù)測性的建模技術(shù),它研究的是因變量(目標(biāo))和自變量(預(yù)測器)之間的關(guān)系?;貧w分析在機(jī)器學(xué)習(xí)領(lǐng)域應(yīng)用非常廣泛,例如,商品的銷量預(yù)測問題,交通流量預(yù)測問題。那么,如何為這些回歸問題選擇最合適的機(jī)器學(xué)習(xí)算法呢?這篇文章將從以下一個方面介紹:

1、常用的回歸算法

2、回歸競賽問題以及解決方案

3、正在進(jìn)行中的回歸競賽問題

常用的回歸算法

這里介紹一些回歸問題中常用的機(jī)器學(xué)習(xí)方法,sklearn作為機(jī)器學(xué)習(xí)中一個強(qiáng)大的算法包,內(nèi)置了許多經(jīng)典的回歸算法,下面將一一介紹各個算法:

注:下面回歸算法的代碼已上傳至網(wǎng)盤,如果有小伙伴感興趣,后臺回復(fù)"回歸算法"。

1、線性回歸

線性回歸擬合一個帶系數(shù)的線性模型,以最小化數(shù)據(jù)中的觀測值與線性預(yù)測值之間的殘差平方和。

sklearn中也存在線性回歸的算法庫的接口,代碼示例如下所示:

#加載線性模型算法庫fromsklearnimportlinear_model#創(chuàng)建線性回歸模型的對象regr=linear_model.LinearRegression()#利用訓(xùn)練集訓(xùn)練線性模型regr.fit(X_train,y_train)#使用測試集做預(yù)測y_pred=regr.predict(X_test)

2、嶺回歸

上述的線性回歸算法使用最小二乘法優(yōu)化各個系數(shù),對于嶺回歸來說,嶺回歸通過對系數(shù)進(jìn)行懲罰(L2范式)來解決普通最小二乘法的一些問題,例如,當(dāng)特征之間完全共線性(有解)或者說特征之間高度相關(guān),這個時候適合用嶺回歸。

#加載線性模型算法庫fromsklearn.linear_modelimportRidge#創(chuàng)建嶺回歸模型的對象reg=Ridge(alpha=.5)#利用訓(xùn)練集訓(xùn)練嶺回歸模型reg.fit([[0,0],[0,0],[1,1]],[0,.1,1])#輸出各個系數(shù)reg.coef_reg.intercept_

3、Lasso回歸

Lasso是一個估計(jì)稀疏稀疏的線性模型。它在某些情況下很有用,由于它傾向于選擇參數(shù)值較少的解,有效地減少了給定解所依賴的變量的數(shù)量。Lasso模型在最小二乘法的基礎(chǔ)上加入L1范式作為懲罰項(xiàng)。

#加載Lasso模型算法庫fromsklearn.linear_modelimportLasso#創(chuàng)建Lasso回歸模型的對象reg=Lasso(alpha=0.1)#利用訓(xùn)練集訓(xùn)練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)"""#使用測試集做預(yù)測reg.predict([[1,1]])

4、Elastic Net回歸

Elastic Net 是一個線性模型利用L1范式和L2范式共同作為懲罰項(xiàng)。這種組合既可以學(xué)習(xí)稀疏模型,同時可以保持嶺回歸的正則化屬性。

#加載ElasticNet模型算法庫fromsklearn.linear_modelimportElasticNet#加載數(shù)據(jù)集fromsklearn.datasetsimportmake_regressionX,y=make_regression(n_features=2,random_state=0)#創(chuàng)建ElasticNet回歸模型的對象regr=ElasticNet(random_state=0)#利用訓(xùn)練集訓(xùn)練ElasticNet回歸模型regr.fit(X,y)print(regr.coef_)print(regr.intercept_)print(regr.predict([[0,0]]))

5、貝葉斯嶺回歸

貝葉斯嶺回歸模型和嶺回歸類似。貝葉斯嶺回歸通過最大化邊際對數(shù)似然來估計(jì)參數(shù)。

fromsklearn.linear_modelimportBayesianRidgeX=[[0.,0.],[1.,1.],[2.,2.],[3.,3.]]Y=[0.,1.,2.,3.]reg=BayesianRidge()reg.fit(X,Y)

6、SGD回歸

上述的線性模型通過最小二乘法來優(yōu)化損失函數(shù),SGD回歸也是一種線性回歸,不同的是,它通過隨機(jī)梯度下降最小化正則化經(jīng)驗(yàn)損失。

importnumpyasnpfromsklearnimportlinear_modeln_samples,n_features=10,5np.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)"""

7、SVR

眾所周知,支持向量機(jī)在分類領(lǐng)域應(yīng)用非常廣泛,支持向量機(jī)的分類方法可以被推廣到解決回歸問題,這個就稱為支持向量回歸。支持向量回歸算法生成的模型同樣地只依賴訓(xùn)練數(shù)據(jù)集中的一個子集(和支持向量分類算法類似)。

#加載SVR模型算法庫fromsklearn.svmimportSVR#訓(xùn)練集X=[[0,0],[2,2]]y=[0.5,2.5]#創(chuàng)建SVR回歸模型的對象clf=SVR()#利用訓(xùn)練集訓(xùn)練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]])

8、KNN回歸

在數(shù)據(jù)標(biāo)簽是連續(xù)變量而不是離散變量的情況下,可以使用KNN回歸。分配給查詢點(diǎn)的標(biāo)簽是根據(jù)其最近鄰居標(biāo)簽的平均值計(jì)算的。

X=[[0],[1],[2],[3]]y=[0,0,1,1]fromsklearn.neighborsimportKNeighborsRegressorneigh=KNeighborsRegressor(n_neighbors=2)neigh.fit(X,y)print(neigh.predict([[1.5]]))

9、決策樹回歸

決策樹也可以應(yīng)用于回歸問題,使用sklearn的DecisionTreeRegressor類。

fromsklearn.treeimportDecisionTreeRegressorX=[[0,0],[2,2]]y=[0.5,2.5]clf=DecisionTreeRegressor()clf=clf.fit(X,y)clf.predict([[1,1]])

10、神經(jīng)網(wǎng)絡(luò)

神經(jīng)網(wǎng)絡(luò)使用slearn中MLPRegressor類實(shí)現(xiàn)了一個多層感知器(MLP),它使用在輸出層中沒有激活函數(shù)的反向傳播進(jìn)行訓(xùn)練,也可以將衡等函數(shù)視為激活函數(shù)。因此,它使用平方誤差作為損失函數(shù),輸出是一組連續(xù)的值。

fromsklearn.neural_networkimportMLPRegressormlp=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)

11.RandomForest回歸

RamdomForest回歸也是一種經(jīng)典的集成算法之一。

fromsklearn.ensembleimportRandomForestRegressorfromsklearn.datasetsimportmake_regressionX,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]]))

12、XGBoost回歸

XGBoost近些年在學(xué)術(shù)界取得的成果連連捷報,基本所有的機(jī)器學(xué)習(xí)比賽的冠軍方案都使用了XGBoost算法,對于XGBoost的算法接口有兩種,這里我僅介紹XGBoost的sklearn接口。更多請參考:

https://xgboost.readthedocs.io/en/latest/python/index.html

importxgboostasxgbxgb_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))

13、LightGBM回歸

LightGBM作為另一個使用基于樹的學(xué)習(xí)算法的梯度增強(qiáng)框架。在算法競賽也是每逢必用的神器,且要想在競賽取得好成績,LightGBM是一個不可或缺的神器。相比于XGBoost,LightGBM有如下優(yōu)點(diǎn),訓(xùn)練速度更快,效率更高效;低內(nèi)存的使用量。對于LightGBM的算法接口有兩種,這里我同樣介紹LightGBM的sklearn接口。更多請參考:https://lightgbm.readthedocs.io/en/latest/

importlightgbmaslgbgbm=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))

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4575

    瀏覽量

    92335
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8320

    瀏覽量

    132165

原文標(biāo)題:入門 | 如何為你的回歸問題選擇最合適的機(jī)器學(xué)習(xí)方法?

文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    機(jī)器學(xué)習(xí)算法概念介紹及選用建議

    在從事數(shù)據(jù)科學(xué)工作的時候,經(jīng)常會遇到為具體問題選擇最合適算法的問題。雖然有很多有關(guān)機(jī)器學(xué)習(xí)算法
    的頭像 發(fā)表于 01-14 13:49 ?3706次閱讀
    <b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>算法</b>概念介紹及選用建議

    【下載】《機(jī)器學(xué)習(xí)》+《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》

    ]目錄:第一部分 分類第1章 機(jī)器學(xué)習(xí)基礎(chǔ)  2第2章 k-近鄰算法   15第3章 決策樹   32第4章 基于概率論的分類方法:樸素貝葉斯   53第5章 Logistic回歸  
    發(fā)表于 06-01 15:49

    【阿里云大學(xué)免費(fèi)精品課】機(jī)器學(xué)習(xí)入門:概念原理及常用算法

    的周圍環(huán)境的反饋來做出判斷。課程大綱如下:第1 章 : 機(jī)器學(xué)習(xí)概念、原理和應(yīng)用場景?機(jī)器學(xué)習(xí)基礎(chǔ)概念?機(jī)器
    發(fā)表于 06-23 13:51

    如何選擇機(jī)器學(xué)習(xí)的各種方法

    的這篇博客,講述了如何選擇機(jī)器學(xué)習(xí)的各種方法。 另外,Scikit-learn 也提供了一幅清晰的路線圖給大家選擇:其實(shí)機(jī)器學(xué)習(xí)的基本
    發(fā)表于 03-07 20:18

    干貨 | 這些機(jī)器學(xué)習(xí)算法,你了解幾個?

    優(yōu)勝者。 當(dāng)然,你嘗試的算法必須適合你的問題,這就是選擇正確的機(jī)器學(xué)習(xí)算法的重要性之所在。打個比方,如果你需要清理你的房子,你可以使用真空吸
    發(fā)表于 09-22 08:30

    說說如何選擇最合適你的ARM開發(fā)板7.13

    說說如何選擇最合適你的ARM開發(fā)板7.13
    發(fā)表于 10-09 14:53 ?7次下載

    怎么選擇最合適的預(yù)測性維護(hù)傳感器?

    選擇最合適的傳感器,以確保能夠檢測、診斷甚至預(yù)測故障,這點(diǎn)至關(guān)重要。 目前有許多傳感器被用于檢測旋轉(zhuǎn)機(jī)器及其負(fù)載中的故障,從而避免意外停機(jī)。由于許多旋轉(zhuǎn)機(jī)器(電機(jī)、齒輪、泵和渦輪機(jī))以
    的頭像 發(fā)表于 05-24 10:08 ?2030次閱讀
    怎么<b class='flag-5'>選擇</b><b class='flag-5'>最合適</b>的預(yù)測性維護(hù)傳感器?

    17個機(jī)器學(xué)習(xí)的常用算法

    根據(jù)數(shù)據(jù)類型的不同,對一個問題的建模有不同的方式。在機(jī)器學(xué)習(xí)或者人工智能領(lǐng)域,人們首先會考慮算法學(xué)習(xí)方式。在機(jī)器
    的頭像 發(fā)表于 08-11 11:20 ?1744次閱讀

    17個機(jī)器學(xué)習(xí)的常用算法!

    的想法,這樣可以讓人們在建模和算法選擇的時候考慮能根據(jù)輸入數(shù)據(jù)來選擇最合適算法來獲得最好的結(jié)果。 1.監(jiān)督式
    的頭像 發(fā)表于 08-22 09:57 ?2068次閱讀
    17個<b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>的常用<b class='flag-5'>算法</b>!

    機(jī)器學(xué)習(xí)領(lǐng)域?qū)?b class='flag-5'>算法按照學(xué)習(xí)方式分類進(jìn)行問題解決

    根據(jù)數(shù)據(jù)類型的不同,對一個問題的建模有不同的方式。在機(jī)器學(xué)習(xí)或者人工智能領(lǐng)域,人們首先會考慮算法學(xué)習(xí)方式。在機(jī)器
    的頭像 發(fā)表于 11-22 10:40 ?822次閱讀

    選擇最合適的預(yù)測性維護(hù)傳感器

    選擇最合適的預(yù)測性維護(hù)傳感器
    的頭像 發(fā)表于 12-29 10:02 ?849次閱讀
    <b class='flag-5'>選擇</b><b class='flag-5'>最合適</b>的預(yù)測性維護(hù)傳感器

    機(jī)器學(xué)習(xí)算法總結(jié) 機(jī)器學(xué)習(xí)算法是什么 機(jī)器學(xué)習(xí)算法優(yōu)缺點(diǎn)

    機(jī)器學(xué)習(xí)算法總結(jié) 機(jī)器學(xué)習(xí)算法是什么?機(jī)器
    的頭像 發(fā)表于 08-17 16:11 ?1698次閱讀

    機(jī)器學(xué)習(xí)算法入門 機(jī)器學(xué)習(xí)算法介紹 機(jī)器學(xué)習(xí)算法對比

    ,討論一些主要的機(jī)器學(xué)習(xí)算法,以及比較它們之間的優(yōu)缺點(diǎn),以便于您選擇適合的算法。 一、機(jī)器
    的頭像 發(fā)表于 08-17 16:27 ?888次閱讀

    PCB表面處理的選擇和優(yōu)化,如何選擇最合適的工藝?

    PCB表面處理的選擇和優(yōu)化,如何選擇最合適的工藝?
    的頭像 發(fā)表于 11-24 17:16 ?669次閱讀

    機(jī)器學(xué)習(xí)算法原理詳解

    機(jī)器學(xué)習(xí)作為人工智能的一個重要分支,其目標(biāo)是通過讓計(jì)算機(jī)自動從數(shù)據(jù)中學(xué)習(xí)并改進(jìn)其性能,而無需進(jìn)行明確的編程。本文將深入解讀幾種常見的機(jī)器學(xué)習(xí)
    的頭像 發(fā)表于 07-02 11:25 ?527次閱讀