'''
自助聚合:隨機從n個樣本中抽取m個樣本,構建一棵決策樹,重複此過程,共形成b棵樹,構成每棵樹的樣本不同且隨機,以此來削弱少數強勢樣本對模型**結果的影響。
sklearn.datasets:標準資料集
sklearn.utils:輔助工具
sklearn.tree:決策樹(單個)
model = st.decisiontreeregressor(max_depth = 4)
max_depth:最大樹的高度
model.fit(train_x, train_y)
pred_test_y = model.predict(test_x)
sklearn.ensemble:演算法集合
sklearn.metrics:模型評價(0-1)
sm.r2_score(test_y, pred_test_y)
隨機森林:在自助聚合的基礎上,每次不但隨機選擇部分樣本(行),而且還要隨機選擇部分特徵(列),構建組成決策樹林的每個決策樹。
model = se.randomforestregressor(max_depth = 10, n_estimators = 1000, min_samples_split = 2)
min_samples_split:每棵樹的最小樣本數
正向激勵:開始先為樣本空間中的每個樣本隨機分配初始權重,形成一棵決策樹,用該樹**訓練集中的樣本,將**錯誤的樣本權重予以提公升,再構建一棵決策樹,如此重複共構建b棵帶有不同權重分布的決策樹。
model = se.ababoostregressor(st.decisiontreeregressor(max_depth = 4), n_estimators = 400, random_state = 7)
n_estimators:正向激勵樹的數量
random_state:樣本和特徵隨機提取
特徵重要性:(僅決策樹包含)
model.feature_importances_(學習引數下劃線:學習過程中拿到)
特徵重要性除了與模型演算法有關還與資料採集的時間粒度有關
'''import csv
import numpy as np
import sklearn.utils as su
import sklearn.ensemble as se
import sklearn.metrics as sm
import matplotlib.pyplot as mp
#提取資料day
with
open
("bike_day.csv"
,"r"
)as f:
reader = csv.reader(f)
x, y =
,[]#逐行讀取
for row in reader:2:
13])-
1])fn_day = np.array(x[0]
)#列表變numpy陣列,轉化為浮點型資料
x = np.array(x[1:
], dtype =
float
)y = np.array(y[1:
], dtype =
float
)#打亂順序匹配打亂
x, y = su.shuffle(x, y, random_state =7)
train_size =
int(
len(x)
*0.9
)train_x, train_y, test_x, test_y = x[
:train_size]
, y[
:train_size]
, x[train_size:
], y[train_size:
]model = se.randomforestregressor(max_depth =
10, n_estimators =
1000
, min_samples_split =2)
model.fit(train_x, train_y)
#獲取訓練後的權重
fi_day = model.feature_importances_
pred_test_y = model.predict(test_x)
#打分print
(sm.r2_score(test_y, pred_test_y)
)#提取資料hour
with
open
("bike_hour.csv"
,"r"
)as f:
reader = csv.reader(f)
x, y =
,[]for row in reader:2:
14])-
1])fn_hour = np.array(x[0]
)x = np.array(x[1:
], dtype =
float
)y = np.array(y[1:
], dtype =
float
)x, y = su.shuffle(x, y, random_state =7)
train_size =
int(
len(x)
*0.9
)train_x, train_y, test_x, test_y = x[
:train_size]
, y[
:train_size]
, x[train_size:
], y[train_size:
]model = se.randomforestregressor(max_depth =
10, n_estimators =
100, min_samples_split =2)
model.fit(train_x, train_y)
fi_hour = model.feature_importances_
pred_test_y = model.predict(test_x)
print
(sm.r2_score(test_y, pred_test_y)
)#作圖顯示相同資料不同精度下的權重差異
mp.figure(
"bike"
, facecolor =
"gray"
)mp.subplot(2,
1,1)
mp.title(
"day"
, fontsize =16)
mp.ylabel(
"importance"
, fontsize =12)
mp.tick_params(labelsize =10)
mp.grid(axis =
"y", linestyle =
":")
sorted_indices = fi_day.argsort()[
::-1
]print
(fi_day)
print
(sorted_indices)
pos = np.arange(sorted_indices.size)
mp.bar(pos, fi_day[sorted_indices]
, edgecolor =
"steelblue"
, facecolor =
"deepskyblue"
)mp.xticks(pos, fn_day[sorted_indices]
, rotation =30)
mp.subplot(2,
1,2)
mp.title(
"hour"
, fontsize =16)
mp.xlabel(
"hour"
, fontsize =12)
mp.ylabel(
"importance"
, fontsize =12)
mp.tick_params(labelsize =10)
mp.grid(axis =
"y", linestyle =
":")
sorted_indices = fi_hour.argsort()[
::-1
]pos = np.arange(sorted_indices.size)
mp.bar(pos, fi_hour[sorted_indices]
, edgecolor =
"steelblue"
, facecolor =
"deepskyblue"
)mp.xticks(pos, fn_hour[sorted_indices]
, rotation =30)
mp.tight_layout(
)mp.show(
)
隨機森林演算法python實現
樣本資料 1.實現根據樣本資料 用眼距離distance 最長持續用眼時長duration 總用眼時長total time 戶外運動時長outdoor 用眼角度angle 健康環境光照用眼比例proportion 判別是否需要近視預警 2.樣本實在太少,結果還行,原理都是一樣的 import pan...
隨機森林 python
這 幾天一直在看隨機森林。可以說遇到任何乙個有關 的問題。都可以首先隨機森林來進行 同時得到的結果也不會太差。在這篇文章裡我首先會向大家推薦幾篇寫的比較好的部落格。接著會將我覺得比較好的例子使用python scikit learn包來實現出來。首先推薦的就是 隨機森林入門 簡化版 老外寫的部落格,...
Python 隨機森林
隨機森林講解文件 scikit learn官方文件 scikit learn的官方文件 主要告訴大家如何使用scikit learn包中的類方法來進行隨機森林演算法的 其中講的比較好的是各個引數的具體用途。這裡我給出我的理解和部分翻譯 1 sklearn ensemble模組包含了兩個基於隨機決策樹...