pyhton 隨機森林

2021-08-01 02:35:00 字數 3100 閱讀 2178

#隨機森林,多棵決策樹組成

import pandas as pd

from sklearn.model_selection._validation import cross_val_score #交叉檢驗,計算平均正確率

import numpy as np

filename = "dicision_trees_sample.csv"

#修復引數

dataset = pd.read_csv(filename, parse_dates=["date"]) #將date列的值由字串改為日期型別。

#定義表頭即定義屬性列。

dataset.columns = ["date","starttime","vistorteam","visitorpts","hometeam","homepts","scoretype","ot?","notes"]

#新增新特徵,主場獲勝與否(1表示主場獲勝,0表示主場未獲勝),作為**的結果是否正確的標準。

dataset["homewin"] = dataset["visitorpts"] < dataset["homepts"]

x_c = dataset["homewin"].values

from collections import defaultdict

won_last = defaultdict(int)

#dataset["homelastwin"]和dataset["vistorlastwin"]必須要定義,否則下面迴圈裡的row賦值將沒有作用。

dataset["homelastwin"] = 0

#預設每乙個主場球隊在第一次出現的時候都是輸的

dataset["vistorlastwin"] = 0

#預設每乙個客場球隊在第一次出現的時候都是輸的

#dataset.sort_values("date"),如果報錯,可以將sort_values改為sort(pandas版本問題),資料按照時間排序,因為上一次比賽與下一場比賽是通過時間進行區分的。

for index, row in dataset.sort_values("date").iterrows():

hometeam = row["hometeam"]

visitorteam = row["vistorteam"]

row["homelastwin"] = won_last[hometeam]

row["vistorlastwin"] = won_last[visitorteam]

dataset.ix[index] = row

won_last[hometeam] = row["homewin"]

won_last[visitorteam] = not row["homewin"]

#建立新特徵,提高準確率,球隊排名作為**是否獲勝的依據

dataset["hometeamrankshiger"] = 0

standings_filename = "leagues_nba_2013_standings_expanded-standings.csv"

standings = pd.read_csv(standings_filename)

for index, row in dataset.sort_values("date").iterrows():

hometeam = row["hometeam"]

visitorteam = row["vistorteam"]

#處理有些球隊更名問題

if hometeam == "new orleans pelicans":

hometeam = "new orleans hornets"

elif visitorteam == "new orleans pelicans":

visitorteam = "new orleans hornets"

#standings[ standings["team"]== hometeam ],首先在standings篩選出hometeam,然後得到它的排名

homerank = standings[ standings["team"]== hometeam ]["rk"].values[0] #存放主場球隊排名

visitorrank = standings[ standings["team"]== visitorteam]["rk"].values[0] #存放客場球隊排名

row["hometeamrankshiger"] = int(homerank > visitorrank)

dataset.ix[index] = row

x_homehigher = dataset[["homelastwin", "vistorlastwin","hometeamrankshiger"]].values

#隨機森林採用預設引數

from sklearn.ensemble import randomforestclassifier

x_d = x_homehigher;

clf = randomforestclassifier(random_state=14)

scores = cross_val_score(clf, x_d, x_c, scoring="accuracy")

print("預設引數隨機森林,accuracy: %".format(np.mean(scores) * 100))

#通過gridsearchcv從parameter_space來搜尋隨機森林最佳引數

from sklearn.model_selection._search import gridsearchcv

parameter_space =

grid = gridsearchcv(clf, parameter_space)

grid.fit(x_d, x_c)

print("從引數空間搜尋最佳引數隨機森林,accuracy: %".format(grid.best_score_ * 100))

print(grid.best_estimator_)

執行結果截圖:

隨機森林隨機 三

2018年7月22日 陣雨 感冒發燒喉嚨疼,只因為一杯正常冰的奶蓋!以後得少喝加冰的東西了.前面說的是整合學習的兩種形式,這跟隨機森林有啥關係呢?隨機森林是bagging的乙個擴充套件變體.簡單的來說,當bagging演算法中的base learner為決策樹並在訓練決策樹的過程中加入隨機屬性選擇,...

隨機森林演算法

random forest是加州大學伯克利分校的breiman leo和adele cutler於2001年發表的 中提到的新的機器學習演算法,可以用來做分類,聚類,回歸,和生存分析,這裡只簡單介紹該演算法在分類上的應用。random forest 隨機森林 演算法是通過訓練多個決策樹,生成模型,然...

理解隨機森林

理解隨機森林 隨機森林利用隨機的方式將許多決策樹組合成乙個森林,每個決策樹在分類的時候投票決定測試樣本的最終類別。下面我們再詳細說一下隨機森林是如何構建的。隨機森林主要包括4個部分 隨機選擇樣本 隨機選擇特徵 構建決策樹 隨機森林投票分類。給定乙個訓練樣本集,數量為n,我們使用有放回取樣到n個樣本,...