大师兄的数据分析学习笔记(十九):分类集成(一)

大师兄的数据分析学习笔记(十八):分类模型(四)
大师兄的数据分析学习笔记(二十):分类集成(二)

一、关于集成学习

  • 每种算法的复杂程度和适用范围不同,针对某一条数据,不同的分类器分类效果不同,比如:
方法 适合
熵增益决策树 适合离散值比较多的问题
CART决策树 适合连续值分类问题
KNN、支持向量机 适合标注在空间内隔离性好的情况
  • 为了进一步提升分类整体质量,将多个机器学习算法组合在一起,得到比单一算法性能更好的结果,称为集成学习

二、 强学习和弱和学习

  • 在分类学习中,不同的算法有不同的复杂度,比如:
  • 多项式复杂度:
  • 阶乘复杂度:
  • 指数级复杂度:
  • ...
  • 由于阶乘复杂度指数级复杂度的复杂度提升度太高,应尽量避免这类算法。
  • 如果一个算法是多项式复杂度
  • 强可学习:多项式学习算法的效果明显。
  • 弱科学系:多项式学习算法的效果不明显。
  • 而模型的集成方法,也可以理解为将数个弱可学习的分类器集合成强科学习分类器的过程。

三、集成方法

  • 集成方法分为袋装法提升法
1. 袋装法
  • 袋装法的思路是用训练集训练出几个独立的模型,在预测时分别让不同的子模型进行判断,对于分类问题,让不同的子模型进行投票,投票选出的结果就是最终结果;在回归时,取各结果的参数。

四、随机森林

  • 袋装法最典型的应用是随机森林算法。
  • 随机森林里有很多决策树,这些决策树都是独立训练的,而最终结果取决于这些树的投票。
  • 随机森林有几个关键点:
  • 树的数量:树的数量越多,考虑到的样本的可能情况越多,但也更容易过拟合。
  • 每棵树的特征数:如果少于50个特征,可以考虑采用全部特征;特征多时,可以随机选择一部分特征。
  • 每棵树的训练集怎么选:可以把子集数量定义为与树的数量一致,并进行放回采样,通过样本差获得树的差异性。
  • 决策树的优点:
  • 每个决策树可以不使用全部特征。
  • 不需要剪枝,就可以有效避免过拟合。
>>>import os
>>>import pandas as pd
>>>import numpy as np
>>>from sklearn.model_selection import train_test_split
>>>from sklearn.metrics import  accuracy_score,recall_score,f1_score
>>>from sklearn.ensemble import RandomForestClassifier

>>>models = []
>>>models.append(("RandomForest",RandomForestClassifier(bootstrap=True)))

>>>df = pd.read_csv(os.path.join(".", "data", "WA_Fn-UseC_-HR-Employee-Attrition.csv"))
>>>X_tt,X_validation,Y_tt,Y_validation = train_test_split(df.JobLevel,df.JobSatisfaction,test_size=0.2)
>>>X_train,X_test,Y_train,Y_test = train_test_split(X_tt,Y_tt,test_size=0.25)

>>>for clf_name,clf in models:
>>>    clf.fit(np.array(X_train).reshape(-1,1),np.array(Y_train).reshape(-1,1))
>>>    xy_lst = [(X_train,Y_train),(X_validation,Y_validation),(X_test,Y_test)]
>>>    for i in range(len(xy_lst)):
>>>        X_part = xy_lst[i][0]
>>>        Y_part = xy_lst[i][1]
>>>        Y_pred = clf.predict(np.array(X_part).reshape(-1,1))
>>>        print(i)
>>>        print(clf_name,"-ACC",accuracy_score(Y_part,Y_pred))
>>>        print(clf_name,"-REC",recall_score(Y_part,Y_pred,average='macro'))
>>>        print(clf_name,"-F1",f1_score(Y_part,Y_pred,average='macro'))
>>>        print("="*40)
0
RandomForest -ACC 0.32653061224489793
RandomForest -REC 0.26488902756674626
RandomForest -F1 0.18037863737291104
========================================
1
RandomForest -ACC 0.2891156462585034
RandomForest -REC 0.23440860215053763
RandomForest -F1 0.16347594637223975
========================================
2
RandomForest -ACC 0.30612244897959184
RandomForest -REC 0.24200370076658734
RandomForest -F1 0.1696751689557445
========================================

你可能感兴趣的:(大师兄的数据分析学习笔记(十九):分类集成(一))