1.概念
从若学习算法出发,反复学恶习得到一系列弱分类器(又称基本分类器),然后组合这些弱分类器构成一个强分类器。简单说就是假如有一堆数据data,不管是采用逻辑回归还是SVM算法对当前数据集通过分类器data进行分类,假如一些数据经过第一个分类器之后发现是对的,而另一堆数据经过第一个分类器之后发现数据分类错了,在进行下一轮之前就可以对这些数据进行修改权值的操作,就是对上一轮分类对的数据的权值减小,上一轮分类错的数据的权值增大。最后经过n个分类器分类之后就可以得到一个结果集
注意:adaboost算法主要用于二分类问题,对于多分类问题,adaboost算法效率在大多数情况下就不如随机森林和决策树
要解决的问题:如何将弱分类器(如上描述每次分类经过的每个分类器都是一个弱分类器)组合成一个强分类器:加大分类误差小的瑞分类权值减小分类误差大的弱分类器权值

1.1举例分析




2.决策树,随机森林,adaboost算法比较
以乳腺癌为例来比较三种算法
2.1 加载数据
#使用train_test_split将数据集拆分
from sklearn.model_selection import train_test_split
#将乳腺癌的数据导入,return这个参数是指导入的只有乳腺癌的数据
#如果没有参数,那么导入的就是一个字典,且里面有每个参数的含义
X,y=datasets.load_breast_cancer(return_X_y=True)
#测试数据保留整个数据集的20%
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size= 0.2)
2.2使用决策树
score=0
for i in range(100):
model=DecisionTreeClassifier()
#将训练集数据及类别放入模型中
model.fit(X_train,y_train)
y_ =model.predict(X_test)#预测测试集里的数据类型
score+=accuracy_score(y_test,y_)/100
print("多次执行,决策树准确率是:",score)
运行结果

2.3随机森林
score=0
for i in range(100):
#随机森林的两种随机性:一种是随机抽样,另一种是属性的随机获取。而决策树只有随机抽样一种随机性
model=RandomForestClassifier()
#将训练集数据及类别放入模型中
model.fit(X_train,y_train)
y_ =model.predict(X_test)#预测测试集里的数据类型
score+=accuracy_score(y_test,y_)/100
print("多次执行,随机森林的准确率为是:",score)

2.4adaboost自适应提升算法
score=0
for i in range(100):
model=AdaBoostClassifier()
#将训练集数据及类别放入模型中
model.fit(X_train,y_train)
y_ =model.predict(X_test)#预测测试集里的数据类型
score += accuracy_score(y_test,y_)/100
print("多次执行,adaboost准确率是:",score)

3.手撕算法

adaboost三轮计算结果
在代码中的体现就是X[i]的值
import numpy as np
from sklearn.ensemble import AdaBoostClassifier
from sklearn import tree
import graphviz
X=np.arange(10).reshape(-1,1)#二维,机器学习要求数据必须是二维的
y=np.array([1,1,1,-1,-1,-1,1,1,1,-1])
display(X,y)
display(X,y)运行结果如下图

# SAMME表示构建树的时候,采用相同的裂分方式
#n_estimators表示分裂为三颗树
model = AdaBoostClassifier(n_estimators=3,algorithm='SAMME')
model.fit(X,y)
y_=model.predict(X)
第一颗树的可视化
dot_data=tree.export_graphviz(model[0],filled=True,rounded=True)
graphviz.Source(dot_data)
运行结果

第二棵树的可视化
dot_data=tree.export_graphviz(model[1],filled=True,rounded=True)
graphviz.Source(dot_data)

第三课树的可视化
dot_data=tree.export_graphviz(model[2],filled=True,rounded=True)
graphviz.Source(dot_data)

3.1第一轮
3.1.2gini系数的计算
此处计算的X[i]的值也就是v的值
w1=np.full(shape=10,fill_value=0.1)#初始的样本权重
cond=y ==1 #类别1条件
p1 = w1[cond].sum()
p2= 1-p1
display(p1,p2)
gini=p1*(1-p1)+p2*(1-p2)
上图可知第一棵树的X[0]=2.5的由来方式如下代码如实现
gini_result=[]
best_split={}#最佳分裂条件,X[0]
Original: https://www.cnblogs.com/twq46/p/16803429.html
Author: 剑断青丝ii
Title: 机器学习实战-AdaBoost
相关阅读
Title: df.drop_duplicates() 详解+用法
drop_duplicates()
1、不定义任何参数,完全删除重复的行数据
2、去除重复的几列行数据
import pandas as pd
df = pd.DataFrame({
'brand': ['Yum Yum', 'Yum Yum', 'Indomie', 'Indomie', 'Indomie'],
'style': ['cup', 'cup', 'cup', 'pack', 'pack'],
'rating': [4, 4, 3.5, 15, 5]})
print("---------------------原始数据:")
print(df)
print("------------------------df.drop_duplicates()")
print(df.drop_duplicates())
print("------------------------删除在brand列中重复的数据行")
print(df.drop_duplicates(subset='brand'))
print("------------------------重复行保留第一次出现的行,删除其他行")
print(df.drop_duplicates(keep="first"))
print("----------------------inplace 布尔值,默认为False,是否直接在原数据上删除重复项或删除重复项后返回副本")
print("-----------------inplace=False 删除重复项后返回副本")
print(df.drop_duplicates(inplace=False))
print("-------------df1")
print(df)
print("-----------------inplace=True 直接在原数据上删除重复项")
print(df.drop_duplicates(inplace=True))
print("-------------df2")
print(df)
`python
brand style rating
0 Yum Yum cup 4.0
2 Indomie cup 3.5
3 Indomie pack 15.0
4 Indomie pack 5.0
brand style rating
0 Yum Yum cup 4.0
2 Indomie cup 3.5
3 Indomie pack 15.0
4 Indomie pack 5.0
brand style rating
0 Yum Yum cup 4.0
2 Indomie cup 3.5
3 Indomie pack 15.0
4 Indomie pack 5.0
None
subset: 指定重复数据所在的列。column label or sequence of labels, optional
Only consider certain columns for identifying duplicates, by
default use all of the columns.
keep: {‘first’, ‘last’, False}, default ‘first’
Determines which duplicates (if any) to keep.
-
first
: 除了第一次出现以外,删除重复项。Drop duplicates except for the first occurrence. -
last
: 除了第一次出现以外,删除重复项。Drop duplicates except for the last occurrence. -
False: 删除所有重复项。Drop all duplicates.
inplace:True:直接在原始数据删除,False:不直接在原始数据删除,并生成一个副本。bool, default False
Whether to drop duplicates in place or to return a copy.
ignore_index: bool, default False
If True, the resulting axis will be labeled 0, 1, …, n – 1.
.. versionadded:: 1.0.0
Returns
DataFrame.value_counts: Count unique combinations of columns.
示例:
Original: https://blog.csdn.net/c_lanxiaofang/article/details/125880941
Author: 懒笑翻
Title: df.drop_duplicates() 详解+用法
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/371734/
转载文章受原作者版权保护。转载请注明原作者出处!