大师兄的数据分析学习笔记(十九):分类集成(一)
大师兄的数据分析学习笔记(二十一):线性回归
三、集成方法
2. 提升法
- 与袋装法不同,提升法(boost)是将多个模型串联,每个模型以上一个模型的结果为基础进行训练和预测,最后将每个模型的结果进行加权求和得到判决结果
2.1 Adaboost
- Adaboost应用了提升法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。
- 算法过程:
- 假设有m个点:
- 把每个点加初始权值:
- 循环以下过程:
- 先训练一个弱的分类器.
- 将分类器的错分点相加为:
- 并通过计算获得分类器的权值:
- 最后更新每个样本的权值,如果分对了,就乘以,否则乘以, 其中为正规化的权值:
- 最终将所有的分类器的权值相加,获得判别函数:
- Adaboost的优点如下:
- 精度高,灵活可调。
- 不容易过拟合
- 简化特征工程流程
2.2 代码实现
>>>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
>>>from sklearn.ensemble import AdaBoostClassifier
>>>models = []
>>>models.append(("Adaboost",AdaBoostClassifier()))
>>>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
Adaboost -ACC 0.32086167800453513
Adaboost -REC 0.25459624710099094
Adaboost -F1 0.14092363813679895
========================================
1
Adaboost -ACC 0.3197278911564626
Adaboost -REC 0.250404717853839
Adaboost -F1 0.14941771039332014
========================================
2
Adaboost -ACC 0.30272108843537415
Adaboost -REC 0.2570685434516524
Adaboost -F1 0.14118955654427223
========================================
网友评论