集成学习01:投票法的原理和案例分析

一、原理分析

首先按照西瓜书以及学习资料对集成学习以及投票法有了一个大概的了解。

投票法是一种遵循少数服从多数原则的集成学习模型,通过多个模型的集成降低方差,从而提高模型的鲁棒性。在理想情况下,投票法的预测效果应当优于任何一个基模型的预测效果。投票法属于数据挖掘模型融合的部分,之前看了心跳信号的分类预测,但是基础并不好,后面希望能在每一个步骤部分进一步学习。
在这里插入图片描述
投票法如何用于分类或回归?
如果是分类,投票法把超过半数以上的投票结果作为要预测的分类,投票法处理回归问题,是将各个基分类器的回归结果简单求平均。

二、案例分析

from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_classification
from sklearn.neighbors import KNeighborsClassifier
from matplotlib import pyplot
from numpy import std
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.ensemble import BaggingClassifier
from numpy import mean

创建一个1000个样本,20个特征的随机数据集:
sklearn.datasets.make_classification()
功能:功能:生成样本集,通常用于分类算法
返回值:
X:形状数组[n_samples,n_features]
生成的样本。
y:形状数组[n_samples]
标签,标示样本属于那个聚簇,用整数表示

参数注释
n_features=20特征个数= n_informative() + n_redundant + n_repeated
n_informative=2多信息特征的个数
n_redundant=2冗余信息,informative特征的随机线性组合
n_repeated=0重复信息,随机提取n_informative和n_redundant 特征
n_classes=2分类类别
n_clusters_per_class=2某一个类别是由几个cluster构成的
weights=None列表类型,权重比
random_state=None如果是int,random_state是随机数发生器使用的种子; 如果RandomState实例,random_state是随 机数生成器; 如果没有,则随机数生成器是np.random使用的RandomState实例
def get_dataset():
    X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=2)
    # summarize the dataset
    return X,y

如果使用鸢尾花数据集

from sklearn.datasets import load_iris
def get_dataset():
    iris=load_iris()
    X=iris.data
    y=iris.target
    # summarize the dataset
    return X,y

使用多个KNN模型作为基模型演示投票法,其中每个模型采用不同的邻居值K参数
sklearn.neighbors.KNeighborsClassifier()
功能:用于实现k近邻投票算法的分类器。

参数注释
n_neighbors默认情况下kneighbors查询使用的邻居数。就是k-NN的k的值,选取最近的k个点
weights(默认=‘uniform’)均等权重;distance:不均等的权重,距离近的点比距离远的点的影响大:用户自定义函数,接收距离的数组,返回一组维数相同的权重。
algorithm{‘auto’(自己决定合适的搜索算法,‘ball_tree’(克服kd树高纬失效,每个节点是一个超球体),‘kd_tree’(二叉树),‘brute’(蛮力搜索)}
leaf_sizeint,optional(默认值= 30) 是构造的kd树和ball树的大小。会影响树构建的速度和搜索速度,以及存储树所需的内存大小
p(默认= 2):使用欧式距离公式进行距离度量。1:使用曼哈顿距离公式进行距离度量

列表(list)、元祖(tuple)、集合(set),和字典(dictionary)区别和联系

# get a voting ensemble of models
def get_voting():
    # define the base models
    models = list()
    models.append(('knn1', KNeighborsClassifier(n_neighbors=1)))
    models.append(('knn3', KNeighborsClassifier(n_neighbors=3)))
    models.append(('knn5', KNeighborsClassifier(n_neighbors=5)))
    models.append(('knn7', KNeighborsClassifier(n_neighbors=7)))
    models.append(('knn9', KNeighborsClassifier(n_neighbors=9)))
    # define the voting ensemble
    ensemble = VotingClassifier(estimators=models, voting='hard')
    return ensemble

创建一个模型列表来评估投票带来的提升,包括KNN模型配置的每个独立版本和硬投票模型。下面的get_models()函数可以为我们创建模型列表进行评估。

# get a list of models to evaluate
def get_models():
    models = dict()
    models['knn1'] = KNeighborsClassifier(n_neighbors=1)
    models['knn3'] = KNeighborsClassifier(n_neighbors=3)
    models['knn5'] = KNeighborsClassifier(n_neighbors=5)
    models['knn7'] = KNeighborsClassifier(n_neighbors=7)
    models['knn9'] = KNeighborsClassifier(n_neighbors=9)
    models['hard_voting'] = get_voting()
    return models

下面的evaluate_model()函数接收一个模型实例,并以分层10倍交叉验证三次重复的分数列表的形式返回。
cross_val_score()
功能:用来进行交叉验证

参数注释
estimator估计方法对象(分类器)
X数据特征(Features)
y数据标签(Labels)
soring调用方法(包括accuracy和mean_squared_error等等)
cv折交叉验证
n_jobs同时工作的cpu个数(-1代表全部)
# evaluate a give model using cross-validation
from sklearn.model_selection import cross_val_score   #Added by ljq
def evaluate_model(model, X, y):
    cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
    scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
    return scores

报告每个算法的平均性能,还可以创建一个箱形图和须状图来比较每个算法的精度分数分布。

# define dataset
X, y = get_dataset()
# get the models to evaluate
models = get_models()
# evaluate the models and store results
results, names = list(), list()
for name, model in models.items():
    scores = evaluate_model(model, X, y)
    results.append(scores)
    names.append(name)
    print('>%s %.3f (%.3f)' % (name, mean(scores), std(scores)))
# plot model performance for comparison
pyplot.boxplot(results, labels=names, showmeans=True)
pyplot.show()

在这里插入图片描述
在这里插入图片描述

博客推荐:
https://blog.csdn.net/pythonstartl/article/details/83010928
https://blog.csdn.net/wuzhongqiang/article/details/105012739

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
加权投票集成学习是一种常用的集成学习,它通过将多个基分类器的预测结果进行加权平均或加权投票来得到最终的预测结果。其原理如下: 1. 基分类器训练:首先,我们需要训练多个基分类器。每个基分类器可以使用不同的算或者使用相同算的不同参数设置。通过使用不同的基分类器,可以增加模型的多样性,提高集成模型的泛化能力。 2. 预测结果融合:在测试阶段,每个基分类器对输入样本进行预测,并生成一个预测结果。这些预测结果可以是类别标签(如二分类问题中的0和1),也可以是概率值(如多分类问题中每个类别的概率)。然后,对这些预测结果进行加权平均或加权投票来得到最终的预测结果。 - 加权平均:对于回归问题或者概率预测问题,可以将每个基分类器的预测结果乘以一个权重,并将它们相加得到最终的预测结果。权重可以根据基分类器的性能进行分配,性能较好的基分类器可以分配较大的权重。 - 加权投票:对于分类问题,可以为每个基分类器分配一个权重,并根据基分类器的预测结果进行加权投票。最终的预测结果可以是得票最多的类别标签。 加权投票集成学习的优点在于能够结合多个基分类器的优势,提高模型的准确性和鲁棒性。同时,通过调整权重,可以对不同基分类器的贡献进行灵活控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值