SKLEARN简单使用(随机森林)

import matplotlib.pyplot as plt
import pandas as pd
import statsmodels.api as sm
from matplotlib.font_manager import *
from pylab import *


from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split


#定义自定义字体
myfont = FontProperties(fname='/temp/msyh.ttf')
#解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus']=False
mpl.rcParams['font.sans-serif'] = ['SimHei']

df = pd.read_csv("/temp/iris.data",names=['花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度', '类别'])

clf = RandomForestClassifier(max_depth=5, n_estimators=10)

#数据
X = df.ix[:,:4]
#结果
y = df.ix[:,4]
#随机划分训练集和测试集
'''
train_data:所要划分的样本特征集
train_target:所要划分的样本结果
test_size:样本占比,如果是整数的话就是样本的数量
random_state:是随机数的种子。
'''
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3)

#向量传递到指定分类器
clf.fit(X_train,y_train)
#随机森林分类器
y_pred = clf.predict(X_test)
rf = pd.DataFrame(list(zip(y_pred, y_test)), columns=['predicted', 'actual'])
rf['correct'] = rf.apply(lambda r: 1 if r['predicted'] == r['actual'] else 0, axis=1)
#显示结果
print(rf)
#显示准确度
print(rf['correct'].sum()/rf['correct'].count())

在import语句之后,第一行看上去很奇怪的代码实例化了我们的分类器,这个例子中是随机森林分类器。这里选择一个使用10个决策树的森林,而每棵树最多允许五层的判定深度。如此实施的原因是为了避免过拟合

 

接下来的两行创建了X矩阵和y向量。初始的iris数据框包含四个特征:花瓣的宽度和长度,以及花萼的宽度和长度。这些特征被选中并成为独立特征矩阵X。最后一列,iris类别的名称,就成为了因变的y向量。

 

然后这些被传递到train_test_split方法,该方法将数据打乱并划分为四个子集,X_train,X_test,y_train和y_test。参数test_size被设置为0.3,这意味着数据集的30%将被分配给X_test和y_test部分,而其余的将被分配到训练的部分,X_train和y_train。

 

接下来,使用训练数据来拟合我们的模型。一旦模型训练完毕,再通过测试数据来调用分类器的预测方法。请记住,测试数据是分类器没有处理过的数据。预测的返回结果是预估标签的列表。然后,我们创建对应实际标签与预估标签的数据框。最终,我们加和正确的预测次数,并将其除以样例的总数,从而看出预测的准确率。

 

          predicted           actual  correct
0   Iris-versicolor  Iris-versicolor        1
1    Iris-virginica   Iris-virginica        1
2    Iris-virginica  Iris-versicolor        0
3       Iris-setosa      Iris-setosa        1
4   Iris-versicolor  Iris-versicolor        1
5       Iris-setosa      Iris-setosa        1
6    Iris-virginica   Iris-virginica        1
7   Iris-versicolor  Iris-versicolor        1
8       Iris-setosa      Iris-setosa        1
9    Iris-virginica   Iris-virginica        1
10  Iris-versicolor  Iris-versicolor        1
11  Iris-versicolor  Iris-versicolor        1
12   Iris-virginica   Iris-virginica        1
13      Iris-setosa      Iris-setosa        1
14  Iris-versicolor  Iris-versicolor        1
15      Iris-setosa      Iris-setosa        1
16  Iris-versicolor  Iris-versicolor        1
17  Iris-versicolor  Iris-versicolor        1
18      Iris-setosa      Iris-setosa        1
19   Iris-virginica   Iris-virginica        1
20  Iris-versicolor  Iris-versicolor        1
21   Iris-virginica   Iris-virginica        1
22   Iris-virginica  Iris-versicolor        0
23      Iris-setosa      Iris-setosa        1
24  Iris-versicolor  Iris-versicolor        1
25   Iris-virginica   Iris-virginica        1
26      Iris-setosa      Iris-setosa        1
27  Iris-versicolor  Iris-versicolor        1
28      Iris-setosa      Iris-setosa        1
29   Iris-virginica   Iris-virginica        1
30   Iris-virginica   Iris-virginica        1
31      Iris-setosa      Iris-setosa        1
32      Iris-setosa      Iris-setosa        1
33  Iris-versicolor  Iris-versicolor        1
34  Iris-versicolor  Iris-versicolor        1
35      Iris-setosa      Iris-setosa        1
36      Iris-setosa      Iris-setosa        1
37  Iris-versicolor  Iris-versicolor        1
38   Iris-virginica   Iris-virginica        1
39  Iris-versicolor  Iris-versicolor        1
40      Iris-setosa      Iris-setosa        1
41   Iris-virginica   Iris-virginica        1
42      Iris-setosa      Iris-setosa        1
43      Iris-setosa      Iris-setosa        1
44   Iris-virginica   Iris-virginica        1

准确度=0.955555555556