日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

入门 | 如何为你的回归问题选择最合适的机器学习方法?

發(fā)布時(shí)間:2024/9/15 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 入门 | 如何为你的回归问题选择最合适的机器学习方法? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

點(diǎn)擊“小詹學(xué)Python”,“星標(biāo)”或"置頂"

關(guān)鍵時(shí)刻,第一時(shí)間送達(dá)

本文轉(zhuǎn)載自“AI算法之心


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

1、常用的回歸算法

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

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


常用的回歸算法

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


注:下面回歸算法的代碼已上傳至網(wǎng)盤,如果有小伙伴感興趣,歡迎關(guān)注"AI算法之心",后臺(tái)回復(fù)"回歸算法"。


1、線性回歸

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

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


#加載線性模型算法庫
from?sklearn?import?linear_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)化各個(gè)系數(shù),對于嶺回歸來說,嶺回歸通過對系數(shù)進(jìn)行懲罰(L2范式)來解決普通最小二乘法的一些問題,例如,當(dāng)特征之間完全共線性(有解)或者說特征之間高度相關(guān),這個(gè)時(shí)候適合用嶺回歸。


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



3、Lasso回歸

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


#加載Lasso模型算法庫
from?sklearn.linear_model?import?Lasso
#?創(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?是一個(gè)線性模型利用L1范式和L2范式共同作為懲罰項(xiàng)。這種組合既可以學(xué)習(xí)稀疏模型,同時(shí)可以保持嶺回歸的正則化屬性。


#加載ElasticNet模型算法庫
from?sklearn.linear_model?import?ElasticNet
#加載數(shù)據(jù)集
from?sklearn.datasets?import?make_regression
X,?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ù)。


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回歸

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


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



7、SVR

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


#加載SVR模型算法庫
from?sklearn.svm?import?SVR
#訓(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]
from?sklearn.neighbors?import?KNeighborsRegressor
neigh?=?KNeighborsRegressor(n_neighbors=2)
neigh.fit(X,?y)?
print(neigh.predict([[1.5]]))



9、決策樹回歸

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


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



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

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


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)



11.RandomForest回歸

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


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



11、XGBoost回歸

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

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


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



12、LightGBM回歸

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


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



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

為了方便小伙伴們練習(xí)機(jī)器學(xué)習(xí)中的相關(guān)項(xiàng)目,這里整理一些回歸競賽問題,幫助入門機(jī)器學(xué)習(xí)的小伙伴們更加深入的掌握機(jī)器學(xué)習(xí)中的回歸問題。


入門級(jí)比賽:


Kaggle——房價(jià)預(yù)測

這個(gè)比賽作為最基礎(chǔ)的回歸問題之一,很適合入門機(jī)器學(xué)習(xí)的小伙伴們。

網(wǎng)址:https://www.kaggle.com/c/house-prices-advanced-regression-techniques

經(jīng)典解決方案:?

XGBoost解決方案:?https://www.kaggle.com/dansbecker/xgboost

Lasso解決方案:?https://www.kaggle.com/mymkyt/simple-lasso-public-score-0-12102




進(jìn)階比賽:


Kaggle——銷售量預(yù)測

這個(gè)比賽作為經(jīng)典的時(shí)間序列問題之一,目標(biāo)是為了預(yù)測下個(gè)月每種產(chǎn)品和商店的總銷售額。

網(wǎng)址:https://www.kaggle.com/c/competitive-data-science-predict-future-sales

經(jīng)典解決方案:

LightGBM:?https://www.kaggle.com/sanket30/predicting-sales-using-lightgbm

XGBoost:?https://www.kaggle.com/fabianaboldrin/eda-xgboost

第一名解決方案:https://www.kaggle.com/c/competitive-data-science-predict-future-sales/discussion/74835#latest-503740



TOP比賽方案:


Kaggle——餐廳訪客預(yù)測

網(wǎng)址:https://www.kaggle.com/c/recruit-restaurant-visitor-forecasting

解決方案:

1st?方案:?https://www.kaggle.com/plantsgo/solution-public-0-471-private-0-505

7th?方案:https://www.kaggle.com/c/recruit-restaurant-visitor-forecasting/discussion/49259#latest-284437

8th?方案:https://github.com/MaxHalford/kaggle-recruit-restaurant

12th?方案:https://www.kaggle.com/c/recruit-restaurant-visitor-forecasting/discussion/49251#latest-282765



Kaggle——CorporaciónFavoritaGrocery銷售預(yù)測

網(wǎng)址:https://www.kaggle.com/c/favorita-grocery-sales-forecasting

解決方案:

1st?方案:?https://www.kaggle.com/c/favorita-grocery-sales-forecasting/discussion/47582#latest-360306

2st?方案:https://www.kaggle.com/c/favorita-grocery-sales-forecasting/discussion/47568#latest-278474

3st?方案:https://www.kaggle.com/c/favorita-grocery-sales-forecasting/discussion/47560#latest-302253

4st?方案:https://www.kaggle.com/c/favorita-grocery-sales-forecasting/discussion/47529#latest-271077

5st方案:https://www.kaggle.com/c/favorita-grocery-sales-forecasting/discussion/47556#latest-270515

6st方案:https://www.kaggle.com/c/favorita-grocery-sales-forecasting/discussion/47575#latest-269568

正在進(jìn)行中的回歸競賽

小伙伴們看到上面的解決方案是不是躍躍欲試,最近國內(nèi)也有各大回歸比賽,趕緊趁熱打鐵,來學(xué)習(xí)學(xué)習(xí)回歸比賽吧!

2019年騰訊廣告大賽——廣告曝光預(yù)估

網(wǎng)址:https://algo.qq.com/application/home/home/index.html


往期推薦:

不會(huì)代碼,如何搭建一個(gè)個(gè)人博客?


總結(jié)

以上是生活随笔為你收集整理的入门 | 如何为你的回归问题选择最合适的机器学习方法?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。