python實現簡單隨機森林

2021-10-24 09:18:15 字數 4403 閱讀 7166

'''

自助聚合:隨機從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模組包含了兩個基於隨機決策樹...