《Python-數(shù)據(jù)挖掘?qū)嵺`》教學(xué)課件-第6章-決策樹預(yù)測NBA獲勝球隊_第1頁
《Python-數(shù)據(jù)挖掘?qū)嵺`》教學(xué)課件-第6章-決策樹預(yù)測NBA獲勝球隊_第2頁
《Python-數(shù)據(jù)挖掘?qū)嵺`》教學(xué)課件-第6章-決策樹預(yù)測NBA獲勝球隊_第3頁
《Python-數(shù)據(jù)挖掘?qū)嵺`》教學(xué)課件-第6章-決策樹預(yù)測NBA獲勝球隊_第4頁
《Python-數(shù)據(jù)挖掘?qū)嵺`》教學(xué)課件-第6章-決策樹預(yù)測NBA獲勝球隊_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第6章決策樹預(yù)測NBA獲勝球隊2025/1/4

NBA比賽結(jié)果預(yù)測31加載數(shù)據(jù)集4決策樹應(yīng)用2隨機(jī)森林目錄NBA比賽通常是難分勝負(fù),有些時候會在最后一刻才會決出勝負(fù),因此,預(yù)測哪支球隊最后獲勝會非常困難。通常你看好的球隊恰恰在這場比賽中就會輸給比它弱的球隊。許多預(yù)測比賽勝負(fù)的研究往往會有準(zhǔn)確率上限,根據(jù)不同的比賽,準(zhǔn)確率一般會在70%~80%之間,體育賽事的預(yù)測一般使用數(shù)據(jù)挖掘和統(tǒng)計學(xué)習(xí)方法。在此,我們將用到?jīng)Q策樹和隨機(jī)森林來預(yù)測誰是某場NBA比賽的獲勝隊,決策樹有兩個主要的優(yōu)勢:(1)決策過程易于機(jī)器和人類理解(2)能處理不同類型的特征案例背景我們將使用NBA2015-2016賽季的比賽數(shù)據(jù)。http://Basketball-R網(wǎng)站提供了NBA及其他賽事的大量資料和統(tǒng)計數(shù)據(jù)??梢酝ㄟ^第三章介紹的網(wǎng)絡(luò)爬蟲知識從指定網(wǎng)站中爬取比賽數(shù)據(jù)。通過爬蟲采集數(shù)據(jù)的過程可以分為兩個過程。(1)第一個過程是根據(jù)NBA比賽情況及網(wǎng)站URL變化情況獲取帶有比賽數(shù)據(jù)的頁面,并在此基礎(chǔ)上爬取整個賽季中每個月份的比賽數(shù)據(jù),最后將其匯總輸出。加載數(shù)據(jù)集-網(wǎng)絡(luò)爬蟲采集數(shù)據(jù)我們將使用NBA2015-2016賽季的比賽數(shù)據(jù)。http://Basketball-R網(wǎng)站提供了NBA及其他賽事的大量資料和統(tǒng)計數(shù)據(jù)??梢酝ㄟ^第三章介紹的網(wǎng)絡(luò)爬蟲知識從指定網(wǎng)站中爬取比賽數(shù)據(jù)。通過爬蟲采集數(shù)據(jù)的過程可以分為兩個過程。(1)第一個過程是根據(jù)NBA比賽情況及網(wǎng)站URL變化情況獲取帶有比賽數(shù)據(jù)的頁面,并在此基礎(chǔ)上爬取整個賽季中每個月份的比賽數(shù)據(jù),最后將其匯總輸出。(具體數(shù)據(jù)見basketball.csv,具體代碼見C6_Spideri.py)加載數(shù)據(jù)集(2)爬取到的數(shù)據(jù)保存為CSV格式,CSV為簡單的文本格式文件,每行為一條用逗號分隔的數(shù)據(jù)(文件格式的名字就是這么來的)。在記事本里輸入內(nèi)容,保存時使用.csv擴(kuò)展名,也能生成CSV文件。只要能閱讀文本文件的編輯器,就能打開CSV文件,也可以用Excel把它作為電子表格打開。(3)第二個過程是獲取standing,這是為了在預(yù)測比賽結(jié)果的過程中加入歷史比賽數(shù)據(jù),以求后續(xù)獲得更好的預(yù)測效果。(4)由于網(wǎng)站自身的原因,爬取數(shù)據(jù)過程相對緩慢,在具體爬蟲的過程可以自行選擇感興趣的網(wǎng)站修改爬蟲代碼完成爬蟲任務(wù)。爬取到的數(shù)據(jù)保存為CSV格式,包含了2015-2016賽季NBA常規(guī)賽季的1320場比賽。加載數(shù)據(jù)集從上面的輸出結(jié)果中,我們發(fā)現(xiàn)了以下幾個問題。日期是字符串格式,而不是日期對象。第一行沒有數(shù)據(jù)。從視覺上檢查結(jié)果,發(fā)現(xiàn)表頭不完整或者不正確。這些問題來自數(shù)據(jù)本身,在具體操作的過程中有些同學(xué)會直接修改數(shù)據(jù)表,不過這樣工作量非常大,并且不可復(fù)原,落下步驟或是弄錯哪一步,就會造成沒法還原之前的結(jié)果,因此采用pandas對原始數(shù)據(jù)進(jìn)行預(yù)處理。pandas.read_csv函數(shù)提供了可用來修復(fù)數(shù)據(jù)的參數(shù),導(dǎo)入文件時指定這幾個參數(shù)就好。數(shù)據(jù)清洗我們還可以創(chuàng)建一些特征用于數(shù)據(jù)挖掘。有時候,只要把原始數(shù)據(jù)丟給分類器就行了,但通常需要先抽取數(shù)值型或類別型特征。創(chuàng)建兩個能幫助我們進(jìn)行預(yù)測的特征,分別是這兩支隊伍上場比賽的勝負(fù)情況。贏得上場比賽,大致可以說明該球隊水平較高。遍歷訪問每一行數(shù)據(jù),記錄獲勝球隊。當(dāng)?shù)竭_(dá)一行新數(shù)據(jù)時,分別查看該行數(shù)據(jù)中的兩支球隊在各自的上一場比賽中有沒有獲勝的。找出主場獲勝的球隊:data['HomeWin']=data['VisitorPts']<data['HomePts']我們把主場獲勝球隊的數(shù)據(jù)保存到NumPy數(shù)組里,稍后要用scikit-learn分類器對其進(jìn)行處理。當(dāng)前pandas和scikit-learn并沒有進(jìn)行整合,但是借助NumPy數(shù)組,它們配合地很好。我們用pandas抽取特征后再用scikit-learn抽取特征具體的值。提取新特征

NBA比賽結(jié)果預(yù)測31加載數(shù)據(jù)集4決策樹應(yīng)用2隨機(jī)森林目錄決策樹應(yīng)用小案例首先是訓(xùn)練階段,用訓(xùn)練數(shù)據(jù)構(gòu)造一棵樹。在前面介紹分類與預(yù)測算法的過程中已有詳細(xì)介紹,相反,決策樹跟大多數(shù)機(jī)器學(xué)習(xí)方法類是一種積極學(xué)習(xí)的算法,在訓(xùn)練階段完成模型的創(chuàng)建。其次是預(yù)測階段,用訓(xùn)練好的決策樹預(yù)測新數(shù)據(jù)的類別。圖例["israining","veryhot"]的預(yù)測結(jié)果為“Bad”(壞天氣)。決策樹應(yīng)用介紹創(chuàng)建決策樹的算法有多種,大都通過迭代生成一棵樹。它們從根節(jié)點開始,選取最佳特征,用于第一個決策,到達(dá)下一個節(jié)點,選擇下一個最佳特征,以此類推。當(dāng)發(fā)現(xiàn)無法從增加樹的層級中獲得更多信息時,算法啟動退出機(jī)制。scikit-learn庫實現(xiàn)了分類回歸樹(ClassificationandRegressionTrees,CART)算法并將其作為生成決策樹的默認(rèn)算法,它支持連續(xù)型特征和類別型特征。決策樹中創(chuàng)建決策的標(biāo)準(zhǔn)及參數(shù)退出準(zhǔn)則是決策樹的一個重要特性。構(gòu)建決策樹時,最后幾步?jīng)Q策僅依賴于少數(shù)個體,隨意性大。使用特定節(jié)點作出推測容易導(dǎo)致過擬合訓(xùn)練數(shù)據(jù),而使用退出準(zhǔn)則可以防止決策精度過高。除了設(shè)定退出準(zhǔn)則外,也可以先創(chuàng)建一棵完整的樹,再對其進(jìn)行修剪,去掉對整個過程沒有提供太多信息的節(jié)點。這個過程叫作剪枝(pruning)。scikit-learn庫中實現(xiàn)的決策樹算法給出了退出方法,使用下面這兩個選項就可以達(dá)到目的。min_samples_split:指定創(chuàng)建一個新節(jié)點至少需要的個體數(shù)量。min_samples_leaf:指定為了保留節(jié)點,每個節(jié)點至少應(yīng)該包含的個體數(shù)量。第一個參數(shù)控制著決策節(jié)點的創(chuàng)建,第二個參數(shù)決定著決策節(jié)點能否被保留。決策樹中的參數(shù)決策樹的另一個參數(shù)是創(chuàng)建決策的標(biāo)準(zhǔn),常用的有以下兩個?;岵患兌龋℅iniimpurity):用于衡量決策節(jié)點錯誤預(yù)測新個體類別的比例。信息增益(Informationgain):用信息論中的熵來表示決策節(jié)點提供多少新信息。使用決策樹決策樹1從scikit-learn庫中導(dǎo)入DecisionTreeClassifier類,用它創(chuàng)建決策樹。fromsklearn.treeimportDecisionTreeClassifierclf=DecisionTreeClassifier(random_state=14)說明:我們再次設(shè)定random_state的值為14。本書中凡是用到random_state的地方,我們都用該值。使用相同的隨機(jī)種子(randomseed),能夠保證幾次實驗結(jié)果相同。然而,在以后自己的實驗中,為保證算法的性能不是與特定的隨機(jī)狀態(tài)值相關(guān),在前后幾次實驗中,需使用不同的隨機(jī)狀態(tài)。使用決策樹決策樹2現(xiàn)在我們從pandas數(shù)據(jù)框中抽取數(shù)據(jù),以便用scikit-learn分類器處理。指定需要的列,使用數(shù)據(jù)框的values屬性,就能獲取到每支球隊的上一場比賽結(jié)果。X_previousWins=data[['HomeLastWin','VisitorLastWin']].values對于決策樹算法來說,它與其它分類算法一樣都可以看出是一種估計器,因此它同樣有fit和predict方法。我們?nèi)匀豢梢杂胏ross_val_score方法來求得交叉檢驗的平均正確率:scores=cross_val_score(clf,X_previousWins,y_true,scoring='accuracy')mean_score=np.mean(scores)*100print('theaccuracyis%0.2f'%mean_score+'%')正確率為59.42%,我們應(yīng)該可以做得更好。從數(shù)據(jù)集中構(gòu)建有效特征(FeatureEngineering,特征工程)是數(shù)據(jù)挖掘的難點所在,好的特征直接關(guān)系到結(jié)果的正確率——甚至比選擇合適的算法更重要!

NBA比賽結(jié)果預(yù)測31加載數(shù)據(jù)集4決策樹應(yīng)用2隨機(jī)森林目錄NBA比賽預(yù)測結(jié)果嘗試使用不同的特征,我們應(yīng)該能做得更好。cross_val_score方法可用來測試模型的正確率。有了它,我們就可以嘗試其他特征的分類效果。好多潛在特征都可以拿來用。就我們這個挖掘任務(wù)而言,具體怎么選擇特征呢?我們嘗試問自己以下兩個問題。一般而言,什么樣的球隊水平更高?兩支球隊上一次相遇時,誰是贏家?我們還將加入新球隊的數(shù)據(jù),以檢測算法是否能得到一個用來判斷不同球隊比賽情況的模型。NBA預(yù)測結(jié)果對于上面第一個特征,我們創(chuàng)建一個叫作“主場隊是否通常比對手水平高”的特征,并使用2015賽季的戰(zhàn)績作為特征取值來源。如果一支球隊在2015賽季排名在對手前面,我們就認(rèn)為它的水平更高,本章在數(shù)據(jù)爬取的過程中已經(jīng)獲取2015賽季戰(zhàn)績數(shù)據(jù),此處直接使用即可。standings_filename=r'standings.csv'standings=pd.read_csv(standings_filename)print(data.loc[:4])NBA比賽預(yù)測結(jié)果接接下來,創(chuàng)建一個新特征,創(chuàng)建過程與上個特征類似。遍歷每一行,查找主場隊和客場隊兩支球隊的戰(zhàn)績。代碼如下:data['HomeTeamRanksHigher']=0forindex,rowindata.iterrows():home_team=row['HomeTeam']visitor_team=row['VisitorTeam']現(xiàn)在就能得到兩支球隊的排名,比較它們的排名,更新特征值。#比較排名,更新特征值home_rank=standings[standings['Team']==home_team]['Rk'].values[0]visitor_rank=standings[standings['Team']==visitor_team]['Rk'].values[0]row['HomeTeamRanksHigher']=int(home_rank>visitor_rank)data.loc[index]=rowNBA比賽預(yù)測結(jié)果接下來,我們來統(tǒng)計兩支球隊上場比賽的情況,作為另一個特征。雖然球隊排名有助于預(yù)測(排名靠前的勝算更大),但有時排名靠后的球隊反而能戰(zhàn)勝排名靠前的。原因有很多,例如,排名靠后的球隊某些打法恰好能擊中強(qiáng)者的軟肋。該特征的創(chuàng)建方法與前一個特征類似,首先創(chuàng)建字典,保存上場比賽的獲勝隊伍,在數(shù)據(jù)框中建立新特征。代碼如下:last_match_winner=defaultdict(int)data['HomeTeamWonLast']=0然后,遍歷每條數(shù)據(jù),取到每場賽事的兩支參賽隊伍。forindex,rowindata.iterrows():home_team=row['HomeTeam']visitor_team=row['VisitorTeam']NBA比賽預(yù)測結(jié)果不用考慮哪支球隊是主場作戰(zhàn),我們想看一下這兩支球隊在上一場比賽中到底誰是贏家。因此,按照英文字母表順序?qū)η蜿犆诌M(jìn)行排序,確保兩支球隊無論主客場作戰(zhàn),都使用相同的鍵。teams=tuple(sorted([home_team,visitor_team]))通過查找字典,找到兩支球隊上次比賽的贏家。然后,更新數(shù)據(jù)框中這條數(shù)據(jù)。row['HomeTeamWonLast']=1iflast_match_winner[teams]==row['HomeTeam']else0data.loc[index]=row最后,更新last_match_winner字典,值為兩支球隊在當(dāng)前場次比賽中的勝出者,兩支球隊再相逢時可將其作為參考。winner=row['HomeTeam']ifrow['HomeWin']elserow['VisitorTeam']last_match_winner[teams]=winnerNBA比賽預(yù)測結(jié)果下面,用新抽取的兩個特征創(chuàng)建數(shù)據(jù)集。觀察不同特征組合的分類效果。代碼如下:X_lastwinner=data[['HomeTeamWonLast','HomeTeamRanksHigher']]clf2=DecisionTreeClassifier(random_state=14)scores=cross_val_score(clf2,X_lastwinner,y_true,scoring='accuracy')mean_score2=np.mean(scores)*100print('theaccuracyis%.2f'%mean_score2+'%')正確率為63.30%。最后我們來看一下,決策樹在訓(xùn)練數(shù)據(jù)量很大的情況下,能否得到有效的分類模型。我們將會為決策樹添加球隊,以檢測它是否能整合新增的信息。NBA比賽預(yù)測結(jié)果雖然決策樹能夠處理特征值為類別型的數(shù)據(jù),但scikit-learn庫所實現(xiàn)的決策樹算法要求先對這類特征進(jìn)行處理。用LabelEncoder轉(zhuǎn)換器就能把字符串類型的球隊名轉(zhuǎn)化為整型。代碼如下:fromsklearn.preprocessingimportLabelEncoderencoding=LabelEncoder()將主場球隊名稱轉(zhuǎn)化為整型:encoding.fit(data['HomeTeam'].values)#將主隊名稱轉(zhuǎn)換成整型接下來,抽取所有比賽的主客場球隊的球隊名(已轉(zhuǎn)化為數(shù)值型)并將其組合(在NumPy中叫作“stacking”,是向量組合的意思)起來,形成一個矩陣。代碼如下:home_teams=encoding.transform(data['HomeTeam'].values)visitor_teams=encoding.transform(data['VisitorTeam'].values)X_teams=np.vstack([home_teams,visitor_teams]).TNBA比賽預(yù)測結(jié)果決策樹可以用這些特征值進(jìn)行訓(xùn)練,但DecisionTreeClassifier仍把它們當(dāng)作連續(xù)型特征。例如,編號從0到16的17支球隊,算法會認(rèn)為球隊1和2相似,而球隊4和10不同。但其實這沒意義,對于兩支球隊而言,它們要么是同一支球隊,要么不同,沒有中間狀態(tài)!為了消除這種和實際情況不一致的現(xiàn)象,我們可以使用OneHotEncoder轉(zhuǎn)換器把這些整數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)字。每個特征用一個二進(jìn)制數(shù)字1來表示。例如,LabelEncoder為芝加哥公牛隊分配的數(shù)值是7,那么OneHotEncoder為它分配的二進(jìn)制數(shù)字的第七位就是1,其余隊伍的第七位就是0。NBA比賽預(yù)測結(jié)果每個可能的特征值都這樣處理,而數(shù)據(jù)集會變得很大。代碼如下:fromsklearn.preprocessingimportOneHotEncoderonehot=OneHotEncoder()在相同的數(shù)據(jù)集上進(jìn)行預(yù)處理和訓(xùn)練操作,將結(jié)果保存起來備用。X_teams_expanded=onehot.fit_transform(X_teams).todense()接著,像之前那樣在新數(shù)據(jù)集上調(diào)用決策樹分類器。clf3=DecisionTreeClassifier(random_state=14)onehot=OneHotEncoder()scores=cross_val_score(clf3,X_teams_expanded,y_true,scoring='accuracy')mean_score3=np.mean(scores)*100print('theaccuracyis%.2f'%mean_score3+'%')正確率為62.77%,比基準(zhǔn)值要高,但是沒有之前的效果好。原因可能在于特征數(shù)增加后,決策樹處理不當(dāng)。鑒于此,我們嘗試修改算法,看看會不會起作用。數(shù)據(jù)挖掘有時就是不斷嘗試新算法、使用新特征這樣一個過程。

NBA比賽結(jié)果預(yù)測31加載數(shù)據(jù)集4決策樹應(yīng)用2隨機(jī)森林目錄隨機(jī)森林介紹棵決策樹可以學(xué)到很復(fù)雜的規(guī)則。然而,很可能會導(dǎo)致過擬合問題——學(xué)到的規(guī)則只適用于訓(xùn)練集。解決方法之一就是調(diào)整決策樹算法,限制它所學(xué)到的規(guī)則的數(shù)量。例如,把決策樹的深度限制在三層,只讓它學(xué)習(xí)從全局角度拆分?jǐn)?shù)據(jù)集的最佳規(guī)則,不讓它學(xué)習(xí)適用面很窄的特定規(guī)則,這些規(guī)則會將數(shù)據(jù)集進(jìn)一步拆分為更加細(xì)致的群組。使用這種折中方案得到的決策樹泛化能力強(qiáng),但整體表現(xiàn)稍弱。為了彌補上述方法的不足,我們可以創(chuàng)建多棵決策樹,用它們分別進(jìn)行預(yù)測,再根據(jù)少數(shù)服從多數(shù)的原則從多個預(yù)測結(jié)果中選擇最終預(yù)測結(jié)果。這正是隨機(jī)森林的工作原理。但上述過程有兩個問題。一是創(chuàng)建的多棵決策樹在很大程度上是相同的——每次使用相同的輸入,將得到相同的輸出。我們只有一個訓(xùn)練集,如果嘗試創(chuàng)建多棵決策樹,它們的輸入就可能相同(因此輸出也相同)。解決方法是每次隨機(jī)從數(shù)據(jù)集中選取一部分?jǐn)?shù)據(jù)用作訓(xùn)練集。這個過程叫作裝袋(bagging)。隨機(jī)森林介紹第二個問題是用于前幾個決策節(jié)點的特征非常突出。即使我們隨機(jī)選取部分?jǐn)?shù)據(jù)用作訓(xùn)練集,創(chuàng)建的決策樹相似性仍舊很大。解決方法是,隨機(jī)選取部分特征作為決策依據(jù)。然后,使用隨機(jī)從數(shù)據(jù)集中選取的數(shù)據(jù)和(幾乎是)隨機(jī)選取的特征,創(chuàng)建多棵決策樹。這就是隨機(jī)森林,雖然看上去不是那么直觀,但這種算法在很多數(shù)據(jù)集上效果很好。決策樹的集成效果如何隨機(jī)森林算法內(nèi)在的隨機(jī)性讓人感覺算法的好壞全靠運氣。然而,通過對多棵幾乎是隨機(jī)創(chuàng)建的決策樹的預(yù)測結(jié)果取均值,就能降低預(yù)測結(jié)果的不一致性。我們用方差來表示這種不一致。方差是由訓(xùn)練集的變化引起的。決策樹這類方差大的算法極易受到訓(xùn)練集變化的影響,從而產(chǎn)生過擬合問題。說明:對比來說,偏誤(bias)是由算法中的假設(shè)引起的,而與數(shù)據(jù)集沒有關(guān)系。比如,算法錯誤地假定所有特征呈正態(tài)分布,就會導(dǎo)致較高的誤差。通過分析分類器的數(shù)據(jù)模型和實際數(shù)據(jù)集的匹配情況,就能降低偏誤問題的負(fù)面影響。對隨機(jī)森林中大量決策樹的預(yù)測結(jié)果取均值,能有效降低方差,這樣得到的預(yù)測模型的總體正確率更高。一般而言,決策樹集成做出了如下假設(shè):預(yù)測過程的誤差具有隨機(jī)性,且因分類器而異。因此,使用由多個模型得到的預(yù)測結(jié)果的均值,能夠消除隨機(jī)誤差的影響——只保留正確的預(yù)測結(jié)果。本書中會介紹更多用集成方法消除誤差的例子。隨機(jī)森林算法的參數(shù)scikit-learn庫中的RandomForestClassifier就是對隨機(jī)森林算法的實現(xiàn),它提供了一系列參數(shù)。因為它使用了DecisionTreeClassifier的大量實例,所以它倆的很多參數(shù)是一致的,比如決策標(biāo)準(zhǔn)(基尼不純度/信息增益)、max_features和min_samples_split。當(dāng)然,集成過程還引入了一些新參數(shù)。n_estimators:用來指定創(chuàng)建決策樹的數(shù)量。該值越高,所花時間越長,正確率(可能)也越高。oob_score:如果設(shè)置為真,測試時將不使用訓(xùn)練模型時用過的數(shù)據(jù)。n_jobs:采用并行計算方法訓(xùn)練決策樹時所用到的內(nèi)核數(shù)量。scikit-learn庫提供了用于并行計算的Joblib庫。n_jobs指定所用的內(nèi)核數(shù)。默認(rèn)使用1個內(nèi)核——如果CPU是多核的,可以多用幾個,或者將其設(shè)置為1,開動全部馬力。隨機(jī)森林算法應(yīng)用-僅替換分類器scikit-learn庫實現(xiàn)的隨機(jī)森林算法使用估計器接口,用交叉檢驗方法調(diào)用它即可,代碼跟之前大同小異。fromsklearn.ensembleimportRandomForestClassifierrf=RandomForestClassifier(random_state=14,n_jobs=-1)rf_scores=cross_val_score(rf,X_teams,y_true,scoring='accuracy')mean_rf_score=np.mean(rf_scores)*100print('therandforestclassifieraccuracyis%.2f'%mean_rf_score+'%')只是靠更換分類器,正確率達(dá)到了61.47%。隨機(jī)森林算法應(yīng)用--多參數(shù)應(yīng)用隨機(jī)森林使用不同的特征子集進(jìn)行學(xué)習(xí),應(yīng)該比普通的決策樹更為高效。下面來看一下多用幾個特征效果如何。X_all=np.hstack([X_homehigher,X_teams])rf_clf2=RandomForestClassifier(random_state=14,n_jobs=-1)rf_scores2=cross_val_score(rf_clf2,X_all,y_true,scoring='accuracy')mean_rf_score2=np.mean(rf_scores2)*100print('theaccuracyis%.2f'%mean_rf_score2+'%')正確率為59.35%——正確率反而降低了。說明在選擇的參數(shù)可能不是最優(yōu)組合隨機(jī)森林應(yīng)用--最佳參數(shù)搜索使用GridSearchCV類搜索最佳參數(shù),代碼如下:fromsklearn.model_selectionimportGridSearchCVparam_grid={'max_features':[2,3,'auto'],'n_estimators':[100,110,120],'criterion':['gini','entropy'],"min_samples_leaf":[2,4,6]}clf=RandomForestClassifier(random_state=14,n_jobs=-1)grid=GridSearchCV(clf,param_grid)grid.fit(X_all,y_true)score=grid.best_score_*100print('theaccuracyis%.2f'%score+'%')這次正確率提升較大,達(dá)到了63.53%!隨機(jī)森林應(yīng)用--最佳參數(shù)搜索使用GridSearchCV類搜索最佳參數(shù),代碼如下:fromsklearn.model_selectionimportGridSearchCVparam_grid={'max_features':[2,3,'auto'],'n_estimators':[100,110,120],'criterion':['gini','entropy'],"min_samples_leaf":[2,4,6]}clf=RandomForestClassifier(random_state=14,n_jobs=-1)grid=GridSearchCV(clf,param_grid)grid.fit(X_all,y_true)score=grid.best_score_*100print('theaccuracyis%.2f'%score+'%')這次正確率提升較大,達(dá)到了63.53%!隨機(jī)森林應(yīng)用--輸出最佳模型輸出用網(wǎng)格搜索找到的最佳模型,查

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論