sklearn-RandomForest

sklearn基于随机森林算法提供了两个模型:
RandomForestClassifier:用于分类问题
RandomForestRegressor:用于回归问题

RandomForestClassifier:随机森林分类器
RandomForestClassifier是sklearn提供的随机森林分类模型,其原型为:
class RandomForestClassifier(n_estimators = 10,criterion = ‘gini’,max_depth = None,min_sample_split = 2,min_sample_leaf = 1,min_weight_fraction_leaf = 0.0,max_features = ‘auto’,max_leaf_nodes = None,bootstrap = True,oob_score = False,n_jobs = 1,random_state = None,verbose = 0,warm_start = False,class_weight = None)

参数:
n_estimators:一个整数,指定了随机森林中决策树的数量
criterion:一个字符串,指定了每棵决策树的criterion参数
max_features:一个整数或者浮点数或者字符串或者None,指定了每棵决策树的最大特征数的参数
max_depth:一个整数或者None,指定了每棵决策树的最大深度参数,如果max_leaf_nodes 不是None,则忽略本参数
min_sample_split:一个整数,指定了一个决策树最小分割的样本数的参数
min_sample_leaf:一个整数,指定了每棵决策树的最小叶节点数参数
min_weight_fraction_leaf:一个浮点数,指定了每棵决策树的上叶节点的最小权重比参数
max_leaf_nodes:为整数或者None,指定了每个基础决策树模型的最大叶节点参数
bootstrap:为布尔值,如果为True,则使用采样法,bootstrap_sampling来产生决策树的训练数据集
oob_score:为布尔值。如果为True,则使用包外样本来计算误差
n_jobs:一个整数,指定并行性。如果为-1,则表示将训练和预测任务派发到所有cpu上
random_state:一个整数,或者一个random_state实例,或者None
1)如果是整数,则它指定了随机数生成器的种子
2)如果是RandomState实例,则指定了随机数生成器
3)如果是None,则使用默认的随机数生成器
class_weight:一个字典,或者字典的列表,或者字符串‘balanced’,或者字符串‘balanced——subsample’,或者None
1)如果为字典,则字典给出了每个分类的权重,如{class_label:weight}
2)如果为字符串‘balanced’,则每个分类的权重与该分类在样本集中出现的频率成反比
3)如果为字符串‘balanced_subsample’,则样本集为采样法bootstrap sampling 产生的决策树的训练数据集,每个分类的权重与该分类在采用生成的样本集中出现的频率成反比。
4)如果是None,则每个分类的权重都为1

属性:
estimators_:决策树的实例的数组,它存放的是所有训练过的决策树
class_:一个数组,形状为[n_classes],为类别标签
n_classes_:一个整数,为类别数量
n_features_:一个整数,在训练时使用的特征数量。
n_outputs_:一个整数,在训练时输出的数量
feature_importances_:一个数组,形状为[n_features].它给出了每个特征的重要性。
oob_score_:一个浮点数,训练数据使用包外估计时的得分

方法:
fit(X,y[,sample_weight]):训练模型
predict(X):用模型进行预测,返回预测值
predict_log_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率的对数值。
predict_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率值
score(X,y[,sample_weight]):返回在(X,y)上预测的准确率

首先给出使用RandomForestClassifier的函数:

def test_RandomForestClassifier(*data):
    X_train,X_test,y_train,y_test = data
    clf = sklearn.ensemble.RandomForestClassier()
    clf.fit(X_train,y_train)
    print('training score : %' % clf.score(X_train,y_train))
    print('testing score: %' % clf.score(X_test,y_test))

调用该函数:

X_train,X_test,y_train,y_test = load_data_classification()
test_RandomForestClassifier(X_train,X_test,y_train,y_test)

RandomForestRegressor的参数、属性和方法基本都和RandomForestClassifier一样,只是实现的功能不同,一个用于做回归,一个用于做分类

模型评估与选择
2.1经验误差与过拟合
错误率(error rate):分类错误的样本数占样本总数的比例。E=a/m精度(accuracy):1−a/m即精度=1−错误率误差(error):学习器的实际预测输出与样本的真实输出之间的差异。 训练误差(training error)/经验误差(empirical error):在训练集上的误差。泛化误差(generalization error):在新样本上的误差。过拟合(overfitting):学习器把训练样本学的太好了,把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化能力下降。欠拟合(underfitting):对训练样本的一般性质尚未学好
2.2评估方法
通常,我们可通过实验测试来对学习器的泛化误差进行评估进而做出选择。为此需要使用一个测试集(testing set)来测试学习器对新样本的判别能力,然后以测试集上的测试误差(testing error)作为泛化误差的近似。下面介绍几种产生训练集S和测试集T的方法。
2.2.1留出法(hold-out)
留出法直接将数据集D划分为两个互斥的集合。其中一个作为训练集S,另一个作为测试集T,即D=S∪T,S∩T=∅。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。因为数据划分的不同,所以单次使用留出法得到的结果往往不够稳定可靠,在使用留出法时,一般采用若干次随机划分、重复进行实验后取平均值作为留出法的评估结果。通常将大约2/3~4/5的样本用于训练,剩余的用于测试。测试集小时,评估结果的方差大。训练集小时,平局结果的偏差大。
2.2.2交叉验证法(cross validation)
交叉验证法先将数据集D划分为k个大小相似的互斥子集,即D=D1∪D2∪…∪Dk,Di∩Dj=∅(i≠j)。每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样而得到。然后每次用k−1个子集的并集作为训练集,余下的那个子集作为测试集。最终返回k个结果测试的均值。
k折交叉验证(k−fold cross validation),k最常使用的取值为10,此时称为10折交叉验证。其他常用的k值有5、10。
留一法(Leave-One-Out LOO):此时k=m,即折数等于样本数量。留一法训练集与初试数据集相比只少了一个样本,因此留一法的结果往往被认为比较准确。然而,留一法的计算开销比较大,当样本数量上百万时。。。。。。
2.2.3自助法(bootstrapping)
使用留出法和交叉验证法时,保留了一部分训练样本用于测试,训练集小于D,这样必然会引入一些训练样本规模不同而导致的估计偏差。
自助法直接以自助采样为基础。给定m个样本的数据集D,我们对它进行采样产生数据集D′:每次随机从D中挑选一个样本,将其拷贝放入D′,然后再将该样本放回数据集D。重复m次得到m个样本的数据集D′。样本在m次采样中始终不被采到的概率为(1−1m)m,取极限得到limm→∞(1−1m)m→1e≈0.368
即通过自助采样,初始数据集中约有36.8%的数据未出现在数据集D′中。于是我们可将模型D′用于训练集,D∖D′用于测试集。这样的测试结果亦称包外估计(out-of-bag-estimate)。
自助法在数据集较小、难以有效划分训练/测试集时很有效,自助法产生的数据集改变饿了初始数据集的分布,这会引入偏差。因此在初始数据量足够多时,留出法和交叉验证法更常用一些。

猜你喜欢

转载自blog.csdn.net/baidu_36161077/article/details/73895279
今日推荐