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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

集成学习(随机森林)

發(fā)布時(shí)間:2024/3/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 集成学习(随机森林) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

一、集成學(xué)習(xí)概念

?二、Bagging集成原理

三、隨機(jī)森林

?四、例子(商品分類)


一、集成學(xué)習(xí)概念

集成學(xué)習(xí)通過建??個(gè)模型來解決單?預(yù)測(cè)問題。它的?作原理是?成多個(gè)分類器/模型,各?獨(dú)?地學(xué)習(xí)和作出預(yù) 測(cè)。這些預(yù)測(cè)最后結(jié)合成組合預(yù)測(cè),因此優(yōu)于任何?個(gè)單分類的做出預(yù)測(cè)。

只要單分類器的表現(xiàn)不太差,集成學(xué)習(xí)的結(jié)果總是要好于單分類器的?

?二、Bagging集成原理

分類圓形和長方形

三、隨機(jī)森林

在機(jī)器學(xué)習(xí)中,隨機(jī)森林是?個(gè)包含多個(gè)決策樹的分類器,并且其輸出的類別是由個(gè)別樹輸出的類別的眾數(shù)?定。隨機(jī)森林 = Bagging + 決策樹

列如: 如果你訓(xùn)練了5個(gè)樹, 其中有4個(gè)樹的結(jié)果是True, 1個(gè)樹的結(jié)果是False, 那么最終投票結(jié)果就是True?

?1、隨機(jī)森林夠造過程中的關(guān)鍵步驟(M表示特征數(shù)?):

1)?次隨機(jī)選出?個(gè)樣本,有放回的抽樣,重復(fù)N次(有可能出現(xiàn)重復(fù)的樣本)

2) 隨機(jī)去選出m個(gè)特征, m <M

如果不進(jìn)?隨機(jī)抽樣,每棵樹的訓(xùn)練集都?樣,那么最終訓(xùn)練出的樹分類結(jié)果也是完全?樣的

如果不是有放回的抽樣,那么每棵樹的訓(xùn)練樣本都是不同的,都是沒有交集的,這樣每棵樹都是“有偏的”,都是絕對(duì)“??的”(當(dāng)然這樣說可能不對(duì)),也就是說每棵樹訓(xùn)練出來都是有很?的差異的;?隨機(jī)森 林最后分類取決于多棵樹(弱分類器)的投票表決。

2.包外估計(jì)

在隨機(jī)森林構(gòu)造過程中,如果進(jìn)?有放回的抽樣,我們會(huì)發(fā)現(xiàn),總是有?部分樣本我們選不到。

由于基分類器是構(gòu)建在訓(xùn)練樣本的?助抽樣集上的,只有約 63.2% 原樣本集出現(xiàn)在中,?剩余的 36.8% 的數(shù)據(jù)作為包 外數(shù)據(jù),可以?于基分類器的驗(yàn)證集。?

3.bagging集成優(yōu)點(diǎn)

Bagging + 決策樹/線性回歸/邏輯回歸/深度學(xué)習(xí)… = bagging集成學(xué)習(xí)?法

經(jīng)過上??式組成的集成學(xué)習(xí)?法:

1. 均可在原有算法上提?約2%左右的泛化正確率

2. 簡單, ?便, 通??

?四、例子(商品分類)

import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from imblearn.under_sampling import RandomUnderSampler from sklearn.preprocessing import LabelEncoder from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import log_loss from sklearn.preprocessing import OneHotEncoderdata = pd.read_csv("F:\\數(shù)學(xué)建模\\機(jī)器學(xué)習(xí)\\數(shù)據(jù)\\train.csv") # print(data) # print(data.describe()) # print(data.shape)# sns.countplot(data.target) # plt.show() #該數(shù)據(jù)類別不均衡#數(shù)據(jù)基本處理(數(shù)據(jù)已經(jīng)經(jīng)過脫敏,不在需要特殊處理) # new1_data=data[:10000] #取前一萬行 # print(new1_data) #使用上述方法不可行,使用隨機(jī)欠采樣獲取響應(yīng)數(shù)據(jù) y=data["target"] x=data.drop(["id","target"],axis=1) rus=RandomUnderSampler(random_state=0) x_sample,y_sample=rus.fit_resample(x,y) print(x_sample) print(y_sample) sns.countplot(y_sample) #樣本均衡了 plt.show()#將目標(biāo)值的屬性轉(zhuǎn)化為數(shù)字 le=LabelEncoder() y_sample=le.fit_transform(y_sample) print(y_sample)#分割數(shù)據(jù) x_train,x_test,y_train,y_test = train_test_split(x_sample,y_sample,random_state=22,test_size=0.2) #測(cè)試集合訓(xùn)練集每類樣本不均衡的問題 rf=RandomForestClassifier(oob_score=True) #包外估計(jì) rf.fit(x_train,y_train) y_pre=rf.predict(x_test) print(y_pre) # print(rf.score(x_test,y_test)) # print(rf.oob_score_)#使用logloss模型評(píng)估 # log_loss(y_test,y_pre,eps=1e-15,normalize=True) #log_loss使用中y_test,y_pre需要用one—hot表示 one_hot=OneHotEncoder(sparse=False) y_test1=one_hot.fit_transform(y_test.reshape(-1,1)) y_pre1=one_hot.fit_transform(y_pre.reshape(-1,1)) print(y_test1) print(y_pre1) print(log_loss(y_test1,y_pre1,eps=1e-15,normalize=True)) #改變預(yù)測(cè)值的輸出模式,讓輸出結(jié)果為百分比,降低logloss y_pre_proba=rf.predict_proba(x_test) print(y_pre_proba) print(log_loss(y_test1,y_pre_proba,eps=1e-15,normalize=True))#參數(shù)調(diào)優(yōu)(n_estimators=one_parameter, # max_depth=10,max_features=10,min_samples_leaf=10) 通過正確率和損失圖來一個(gè)一個(gè)確定tuned_parameters=range(10,200,10) accuracy_t=np.zeros(len(tuned_parameters)) error_t=np.zeros(len(tuned_parameters)) # print(accuracy_t) [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] for j,one_parameter in enumerate(tuned_parameters):rf2=RandomForestClassifier(n_estimators=one_parameter,max_depth=10,max_features=10,min_samples_leaf=10,oob_score=True,random_state=0,n_jobs=-1)rf2.fit(x_train,y_train)accuracy_t[j]=rf2.oob_score_ #輸出精確度y_pre=rf2.predict_proba(x_test)error_t[j]=log_loss(y_test,y_pre,eps=1e-15,normalize=True)# print(error_t) plt.plot(tuned_parameters,accuracy_t) plt.xlabel("n_estimators") plt.ylabel("accuracy") plt.grid(True) plt.show()

?

總結(jié)

以上是生活随笔為你收集整理的集成学习(随机森林)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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