Python3入门机器学习 - 集成学习

简介: 集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。#准备数据X,y = datasets.

集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。

#准备数据
X,y = datasets.make_moons(noise=0.3,n_samples=500,random_state=42)

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666)

#逻辑回归预测
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression()
log_reg.fit(X_train,y_train)
log_reg.score(X_test,y_test)

#SVM预测
from sklearn.svm import SVC
svc = SVC()
svc.fit(X_train,y_train)
svc.score(X_test,y_test)

#决策树预测
from sklearn.tree import DecisionTreeClassifier
dec_clf = DecisionTreeClassifier()
dec_clf.fit(X_train,y_train)
dec_clf.score(X_test,y_test)

y1_predict = log_reg.predict(X_test)
y2_predict = svc.predict(X_test)
y3_predict = dec_clf.predict(X_test)

#使用集成学习的方法决定最终预测结果
y_predict = np.array((y1_predict+y2_predict+y3_predict)>=2,dtype='int')

img_ee49e00d9bbea95db7c5641d7f7d05b7.png


使用sklearn中的VotingClassifier
from sklearn.ensemble import VotingClassifier

voting_clf = VotingClassifier(estimators=[
    ('log_clf',LogisticRegression()),
    ('SVM',SVC()),
    ('dec_clf',DecisionTreeClassifier())
],voting='hard')    #hard为少数服从多数的集成学习方式
voting_clf.fit(X_train,y_train)
voting_clf.score(X_test,y_test)


Soft Voting
img_2e116d8f3d9e7e8128e016ed478df0d9.png
Soft Voting这种方式必须要模型具有预测概率的能力,例如逻辑回归算法本身就是基于概率做分类的,而knn算法一类的非参数学习方法,也可以根据样本数据预测概率,SVM算法可以将probablity属性设置为True以支持概率预测。
voting_clf2 = VotingClassifier(estimators=[
    ('log_clf',LogisticRegression()),
    ('SVM',SVC(probability=True)),
    ('dec_clf',DecisionTreeClassifier(random_state=666))
],voting='soft')

voting_clf2.fit(X_train,y_train)
voting_clf2.score(X_test,y_test)


使用Bagging产生大量子模型的集成学习方法

让每个子模型只看数据的一部分,用放回取样的方式来训练大量的子模型,作为集成学习的方法。

from sklearn.ensemble import BaggingClassifier

#创建Bagging集成学习的参数
#使用DecisionTreeClassifier()作为子模型,决策树作为子模型更容易创建子模型间的差异性,对于Bagging这种方式的集成学习来说,决策树是相对较好的子模型选择
#max_samples决定每个子模型最多参考样本数据量
#n_estimators决定生成多少个子模型
#bootstrap决定采用放回抽样还是不放回抽样,True为放回抽样
bagging_clf = BaggingClassifier(DecisionTreeClassifier(),max_samples=100,n_estimators=500,bootstrap=True)

上例为对样本进行随机采样,但对于Bagging,其实有更多的方法可以进行采样来创建子模型


img_a1d0ddc6d98638cd2390a9c1d0bcc410.png
Random Subspaces

#max_features设置随机取的最大样本特征数量
#bootstrap_features设置对特征进行放回或不放回取样
#oob_score设置对所有样本进行采样,不分离训练和测试数据集,而在随机采样中所有没有被采样的数据作为测试集使用
random_subspaces_clf = BaggingClassifier(DecisionTreeClassifier(),max_samples=500,n_estimators=500,bootstrap=True,
                                        max_features=1,bootstrap_features=True,n_jobs=-1,oob_score=True)
random_subspaces_clf.fit(X,y)
random_subspaces_clf.oob_score_
Random Patches

random_patches_clf = BaggingClassifier(DecisionTreeClassifier(),max_samples=100,n_estimators=500,bootstrap=True,
                                        max_features=1,bootstrap_features=True,n_jobs=-1)
random_patches_clf.fit(X,y)
random_patches_clf.oob_score


随机森林

from sklearn.ensemble import RandomForestClassifier

rf_clf = RandomForestClassifier(n_estimators=500,oob_score=True)
rf_clf.fit(X,y)
rf_clf.oob_score_
Extra Trees
from sklearn.ensemble import ExtraTreesClassifier

et_clf = ExtraTreesClassifier(n_estimators=500,oob_score=True,n_jobs=-1,bootstrap=True)
et_clf.fit(X,y)


Boosting


img_62004ae9eba5479ebb89b0004c85c695.png
Ada Boosting思路,对每次学习后,无法较好拟合的数据点,在下次拟合过程中,增加这些数据点的权重,依次循环生成子模型
from sklearn.ensemble import AdaBoostClassifier

ada_clf = AdaBoostClassifier(DecisionTreeClassifier(),n_estimators=500)
ada_clf.fit(X_train,y_train)
ada_clf.score(X_test,y_test)
img_de2ae0923175018bc24766ceea5e9d2c.png
Gradient Boosting思路,对于上次拟合错误的数据点,给与下一个模型专门训练,依次循环
#GradientBoostingClassifier本身基于决策树进行,因此不需要设置best_estamitor
from sklearn.ensemble import GradientBoostingClassifier
ada_clf = GradientBoostingClassifier(n_estimators=500)
ada_clf.fit(X_train,y_train)
目录
相关文章
|
1月前
|
机器学习/深度学习 传感器 运维
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
本文探讨了时间序列分析中数据缺失的问题,并通过实际案例展示了如何利用机器学习技术进行缺失值补充。文章构建了一个模拟的能源生产数据集,采用线性回归和决策树回归两种方法进行缺失值补充,并从统计特征、自相关性、趋势和季节性等多个维度进行了详细评估。结果显示,决策树方法在处理复杂非线性模式和保持数据局部特征方面表现更佳,而线性回归方法则适用于简单的线性趋势数据。文章最后总结了两种方法的优劣,并给出了实际应用建议。
77 7
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
|
2月前
|
机器学习/深度学习 数据采集
机器学习入门——使用Scikit-Learn构建分类器
机器学习入门——使用Scikit-Learn构建分类器
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI的奥秘:机器学习入门指南
【10月更文挑战第30天】本篇文章是一份初学者友好的机器学习入门指南,旨在帮助读者理解并开始实践机器学习。我们将介绍机器学习的基本概念,包括监督学习、无监督学习和强化学习等。我们还将提供一些实用的代码示例,以帮助读者更好地理解和应用这些概念。无论你是编程新手,还是有一定经验的开发者,这篇文章都将为你提供一个清晰的机器学习入门路径。
52 2
|
2月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
40 1
|
2月前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
76 0
|
2月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
45 0
|
3月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
32 1
|
6月前
|
机器学习/深度学习 IDE 开发工具
Python集成开发环境的选择
【7月更文挑战第6天】Python集成开发环境的选择
93 2
|
6月前
|
机器学习/深度学习 IDE 开发工具
Python集成开发环境
【7月更文挑战第6天】Python集成开发环境
88 1
|
Python
无脑安装——Python 及安装python集成开发环境pycharm
1、真机安装python 2、安装python集成开发环境pycharm
无脑安装——Python 及安装python集成开发环境pycharm