1. 程式人生 > >隨機森林演算法隨筆

隨機森林演算法隨筆

主要用於分類。

通過自助法重取樣技術( 是一種從給定訓練集中有放回的均勻抽樣,也就是說,每當選中一個樣本,它等可能地被再次選中並被再次新增到訓練集中),從原始訓練樣本集N中又放回的重複隨機抽取K個樣本生成心得訓練樣本集合,然後根據自主樣本集生成K個分類樹組成隨機森林,新資料的分類結果按分類樹投票多少形成的分數而定。

由很多沒有關聯的決策樹組成

隨機森林演算法根據花瓣大小來判斷花瓣種類:

資料集:

1 5.1 3.5 1.4 0.2 setosa 
2 4.9 3.0 1.4 0.2 setosa 
3 4.7 3.2 1.3 0.2 setosa 
4 4.6 3.1 1.5 0.2 setosa 
5 5.0 3.6 1.4 0.2 setosa 
6 5.4 3.9 1.7 0.4 setosa 
7 4.6 3.4 1.4 0.3 setosa 
8 5.0 3.4 1.5 0.2 setosa 
9 4.4 2.9 1.4 0.2 setosa 
10 4.9 3.1 1.5 0.1 setosa 
11 5.4 3.7 1.5 0.2 setosa 
12 4.8 3.4 1.6 0.2 setosa 
13 4.8 3.0 1.4 0.1 setosa 
14 4.3 3.0 1.1 0.1 setosa 
15 5.8 4.0 1.2 0.2 setosa 
16 5.7 4.4 1.5 0.4 setosa 
17 5.4 3.9 1.3 0.4 setosa 
18 5.1 3.5 1.4 0.3 setosa 
19 5.7 3.8 1.7 0.3 setosa 
20 5.1 3.8 1.5 0.3 setosa 
21 5.4 3.4 1.7 0.2 setosa 
22 5.1 3.7 1.5 0.4 setosa 
23 4.6 3.6 1.0 0.2 setosa 
24 5.1 3.3 1.7 0.5 setosa 
25 4.8 3.4 1.9 0.2 setosa 
26 5.0 3.0 1.6 0.2 setosa 
27 5.0 3.4 1.6 0.4 setosa 
28 5.2 3.5 1.5 0.2 setosa 
29 5.2 3.4 1.4 0.2 setosa 
30 4.7 3.2 1.6 0.2 setosa 
31 4.8 3.1 1.6 0.2 setosa 
32 5.4 3.4 1.5 0.4 setosa 
33 5.2 4.1 1.5 0.1 setosa 
34 5.5 4.2 1.4 0.2 setosa 
35 4.9 3.1 1.5 0.2 setosa 
36 5.0 3.2 1.2 0.2 setosa 
37 5.5 3.5 1.3 0.2 setosa 
38 4.9 3.6 1.4 0.1 setosa 
39 4.4 3.0 1.3 0.2 setosa 
40 5.1 3.4 1.5 0.2 setosa 
41 5.0 3.5 1.3 0.3 setosa 
42 4.5 2.3 1.3 0.3 setosa 
43 4.4 3.2 1.3 0.2 setosa 
44 5.0 3.5 1.6 0.6 setosa 
45 5.1 3.8 1.9 0.4 setosa 
46 4.8 3.0 1.4 0.3 setosa 
47 5.1 3.8 1.6 0.2 setosa 
48 4.6 3.2 1.4 0.2 setosa 
49 5.3 3.7 1.5 0.2 setosa 
50 5.0 3.3 1.4 0.2 setosa 
51 7.0 3.2 4.7 1.4 versicolor 
52 6.4 3.2 4.5 1.5 versicolor 
53 6.9 3.1 4.9 1.5 versicolor 
54 5.5 2.3 4.0 1.3 versicolor 
55 6.5 2.8 4.6 1.5 versicolor 
56 5.7 2.8 4.5 1.3 versicolor 
57 6.3 3.3 4.7 1.6 versicolor 
58 4.9 2.4 3.3 1.0 versicolor 
59 6.6 2.9 4.6 1.3 versicolor 
60 5.2 2.7 3.9 1.4 versicolor 
61 5.0 2.0 3.5 1.0 versicolor 
62 5.9 3.0 4.2 1.5 versicolor 
63 6.0 2.2 4.0 1.0 versicolor 
64 6.1 2.9 4.7 1.4 versicolor 
65 5.6 2.9 3.6 1.3 versicolor 
66 6.7 3.1 4.4 1.4 versicolor 
67 5.6 3.0 4.5 1.5 versicolor 
68 5.8 2.7 4.1 1.0 versicolor 
69 6.2 2.2 4.5 1.5 versicolor 
70 5.6 2.5 3.9 1.1 versicolor 
71 5.9 3.2 4.8 1.8 versicolor 
72 6.1 2.8 4.0 1.3 versicolor 
73 6.3 2.5 4.9 1.5 versicolor 
74 6.1 2.8 4.7 1.2 versicolor 
75 6.4 2.9 4.3 1.3 versicolor 
76 6.6 3.0 4.4 1.4 versicolor 
77 6.8 2.8 4.8 1.4 versicolor 
78 6.7 3.0 5.0 1.7 versicolor 
79 6.0 2.9 4.5 1.5 versicolor 
80 5.7 2.6 3.5 1.0 versicolor 
81 5.5 2.4 3.8 1.1 versicolor 
82 5.5 2.4 3.7 1.0 versicolor 
83 5.8 2.7 3.9 1.2 versicolor 
84 6.0 2.7 5.1 1.6 versicolor 
85 5.4 3.0 4.5 1.5 versicolor 
86 6.0 3.4 4.5 1.6 versicolor 
87 6.7 3.1 4.7 1.5 versicolor 
88 6.3 2.3 4.4 1.3 versicolor 
89 5.6 3.0 4.1 1.3 versicolor 
90 5.5 2.5 4.0 1.3 versicolor 
91 5.5 2.6 4.4 1.2 versicolor 
92 6.1 3.0 4.6 1.4 versicolor 
93 5.8 2.6 4.0 1.2 versicolor 
94 5.0 2.3 3.3 1.0 versicolor 
95 5.6 2.7 4.2 1.3 versicolor 
96 5.7 3.0 4.2 1.2 versicolor 
97 5.7 2.9 4.2 1.3 versicolor 
98 6.2 2.9 4.3 1.3 versicolor 
99 5.1 2.5 3.0 1.1 versicolor 
100 5.7 2.8 4.1 1.3 versicolor 
101 6.3 3.3 6.0 2.5 virginica 
102 5.8 2.7 5.1 1.9 virginica 
103 7.1 3.0 5.9 2.1 virginica 
104 6.3 2.9 5.6 1.8 virginica 
105 6.5 3.0 5.8 2.2 virginica 
106 7.6 3.0 6.6 2.1 virginica 
107 4.9 2.5 4.5 1.7 virginica 
108 7.3 2.9 6.3 1.8 virginica 
109 6.7 2.5 5.8 1.8 virginica 
110 7.2 3.6 6.1 2.5 virginica 
111 6.5 3.2 5.1 2.0 virginica 
112 6.4 2.7 5.3 1.9 virginica 
113 6.8 3.0 5.5 2.1 virginica 
114 5.7 2.5 5.0 2.0 virginica 
115 5.8 2.8 5.1 2.4 virginica 
116 6.4 3.2 5.3 2.3 virginica 
117 6.5 3.0 5.5 1.8 virginica 
118 7.7 3.8 6.7 2.2 virginica 
119 7.7 2.6 6.9 2.3 virginica 
120 6.0 2.2 5.0 1.5 virginica 
121 6.9 3.2 5.7 2.3 virginica 
122 5.6 2.8 4.9 2.0 virginica 
123 7.7 2.8 6.7 2.0 virginica 
124 6.3 2.7 4.9 1.8 virginica 
125 6.7 3.3 5.7 2.1 virginica 
126 7.2 3.2 6.0 1.8 virginica 
127 6.2 2.8 4.8 1.8 virginica 
128 6.1 3.0 4.9 1.8 virginica 
129 6.4 2.8 5.6 2.1 virginica 
130 7.2 3.0 5.8 1.6 virginica 
131 7.4 2.8 6.1 1.9 virginica 
132 7.9 3.8 6.4 2.0 virginica 
133 6.4 2.8 5.6 2.2 virginica 
134 6.3 2.8 5.1 1.5 virginica 
135 6.1 2.6 5.6 1.4 virginica 
136 7.7 3.0 6.1 2.3 virginica 
137 6.3 3.4 5.6 2.4 virginica 
138 6.4 3.1 5.5 1.8 virginica 
139 6.0 3.0 4.8 1.8 virginica 
140 6.9 3.1 5.4 2.1 virginica 
141 6.7 3.1 5.6 2.4 virginica 
142 6.9 3.1 5.1 2.3 virginica 
143 5.8 2.7 5.1 1.9 virginica 
144 6.8 3.2 5.9 2.3 virginica 
145 6.7 3.3 5.7 2.5 virginica 
146 6.7 3.0 5.2 2.3 virginica 
147 6.3 2.5 5.0 1.9 virginica 
148 6.5 3.0 5.2 2.0 virginica 
149 6.2 3.4 5.4 2.3 virginica 
150 5.9 3.0 5.1 1.8 virginica

 

程式碼:


import numpy as np
from sklearn.ensemble import RandomForestClassifier

def loadDataSet(file):
    dataSet = []
    labelSet = []
    fr = open(file)
    for line in fr.readlines():
        #print(line)
        lineSet = line.strip().split()
        #print("lineSet")
        #print(lineSet) #每次讀取的一行資料
        labelSet.append(lineSet[-1])
        #print(labelSet) #每種花瓣的種類的列表集合
        #print(type(lineSet[:-1])) #lineset[:-1]是指每取一行資料,只取列表除了最後一個元素之外的資料
        lineSet = map(float,lineSet[:-1]) #map函式接受一個函式和一個list,並且把這個函式作用在這個list每個元素上
        #print("lineSet2:")
        #print(type(lineSet))
        dataSet.append(list(lineSet))
        #print(dataSet)
    return dataSet, labelSet

def main():
    dataMat, labelMat = loadDataSet(r'F:\DeepLearning\data.txt')
    #print(type(dataMat),dataMat)
    #print(labelMat)
    model= RandomForestClassifier(n_estimators=50, #隨機森林中樹的個數,即學習器的個數
                               criterion='gini',
                               max_features="sqrt", #劃分葉子節點,選擇的最大特徵數目
                               min_samples_leaf=1, #葉子節點最少樣本數,如果某葉子節點數目這個值,就會和兄弟節點一起被剪枝
                               n_jobs=4,) #並行使用的程序數,預設1個,如果設定為-1,該值為總的核數
    model.fit(dataMat, labelMat)
    x_test = np.array([104.0, 6.3, 2.9, 5.6, 1.8]).reshape(1,-1)
    print(x_test)
    predicted= model.predict(x_test)
    print('predicted:', predicted)

if __name__ == '__main__':
    main()