#隨機森林,多棵決策樹組成
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個樣本,...