sklearn机器学习库
集成学习(ensemble learning)
集成学习并非某一种机器学习算法,更像是一种理念。顾名思义,它把各种学习算法集成在一样,“博采众长”。集成学习可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等。
从下图,我们可以对集成学习的思想做一个概括。对于训练集数据,我们通过训练若干个个体学习器,通过一定的结合策略,就可以最终形成一个强学习器,以达到博采众长的目的。
image个人学习器
第一是如何选择个体学习器,个体选择器可以是同质的,比如用一堆决策树,构成随机森林;另外神经网络就是典型的“集成”一堆神经元。理论上讲,这些个体选择器也可以不同,比如将SVM,贝叶斯以及逻辑回归集成到一起。业内目前研究比较多的是同质的个体学习器。
Boosting
Boosting是提升的意思,也就是个体学习器之间是串行的关系。前者的输出是后者的输出,一步步“提升”实现强学习器。
Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)
Bagging
Bagging是打包的意思,也就是说个体学习之间没能强的依赖关系。对于共同的输入样本,每个都“投机采样”,这样N个学习器输出结果不尽相同的。
结合策略
对于前面N个学习器的输出结果,如果来判断最终的分类呢?最简单是取平均数,或者“投票法”,也就是“少数服从多数”。当然更严谨的方法,可以是再加一层学习器,把前面N个结果作为输入,经过学习器来判定最终的结果。
代码实例
梯度提升树(GBDT)
导入pandas,GBDT分类器
import pandas as pd
from sklearn.ensemble import GradientBoostingClassifier
from sklearn import cross_validation, metrics
使用pandas从csv里读取数据并简单分析:
train = pd.read_csv('train_modified.csv')
print(train.head())
print(train['Disbursed'].value_counts())
数据集2W行,第行51列:
Disbursed Existing_EMI ID Loan_Amount_Applied \
0 0 0.0 ID000002C20 300000
1 0 0.0 ID000004E40 200000
2 0 0.0 ID000007H20 600000
3 0 0.0 ID000008I30 1000000
4 0 25000.0 ID000009J40 500000
Loan_Tenure_Applied Monthly_Income Var4 Var5 Age \
0 5 20000 1 0 37
1 2 35000 3 13 30
2 4 22500 1 0 34
3 5 35000 3 10 28
4 2 100000 3 17 31
EMI_Loan_Submitted_Missing ... Var2_2 Var2_3 Var2_4 Var2_5 \
0 1 ... 0 0 0 0
1 0 ... 0 0 0 0
2 1 ... 0 0 0 0
3 1 ... 0 0 0 0
4 1 ... 0 0 0 0
Var2_6 Mobile_Verified_0 Mobile_Verified_1 Source_0 Source_1 Source_2
0 1 1 0 1 0 0
1 1 0 1 1 0 0
2 0 0 1 0 0 1
3 0 0 1 0 0 1
4 0 0 1 0 0 1
数据分类是如下分布,label是0的分类居多数:
0 19680
1 320
把X,y数据分开,用于训练:
target='Disbursed' # Disbursed的值就是二元分类的输出
IDcol = 'ID'
x_columns = [x for x in train.columns if x not in [target, IDcol]]
X = train[x_columns]
y = train['Disbursed']
模型训练:
gbc = GradientBoostingClassifier(random_state=10)
gbc.fit(X,y)
模型预测,predict返回Nx1的ndarray,与真实值y.values计算准确率。可以看出gbdt默认参数的精度已经很高了。
y_pred = gbc.predict(X)
print("Accuracy : %.4g" % metrics.accuracy_score(y.values, y_pred))
#Accuracy : 0.9852
评估ROC_AUC:
y_predprobs = gbc.predict_proba(X)
print('概率矩阵:',y_predprobs)
y_predprob = y_predprobs[:,1]
print("AUC Score (Train): %f" % metrics.roc_auc_score(y, y_predprob))
分类横型的评估:
ROC字面翻译是“受试者工作特征”(Receiver Operating Characteristic)。ROC曲线的面积就是AUC(Area Under the Curve)。AUC用于衡量“二分类问题”机器学习算法性能(泛化能力)。
-
TPR:真实的正例中,被预测正确的比例
True Positive Rate,TPR = TP/(TP+FN) -
FPR:真实的反例中,被预测正确的比例
False Positive Rate,FPR=FP/(TN+FP)
ROC就是以FPR为横轴,TPR为纵轴。
网友评论