模型融合

载入数据

import pandas as pd

names=['preg','plas','pres','skin','test','mass','pedi','age','class']
df = pd.read_csv("./pima-indians-diabetes.csv",names=names)

df.head()
【0】Pregnancies:怀孕次数 
【1】Glucose:葡萄糖 
【2】BloodPressure:血压 (mm Hg) 
【3】SkinThickness:皮层厚度 (mm) 
【4】Insulin:胰岛素 2小时血清胰岛素(mu U / ml 
【5】BMI:体重指数 (体重/身高)^2 
【6】DiabetesPedigreeFunction:糖尿病谱系功能 
【7】Age:年龄 (岁) 
【8】Outcome:类标变量 (0或1)


注: data文件转csv文件步骤
1.打开excel  ->  数据  -> 导入数据
2.另存为 utf-8 逗号分割符格式
df['class'].unique()  # 查看种类 是 0 1 二分类问题
### 1.投票器融合模型
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier  # 模型融合 投票器
import warnings

warnings.filterwarnings('ignore')  # 过滤些基本设定

array = df.values

array
X = array[:,0:8]    #所有行的0-7列的值
Y = array[:,8]      #所有行的第8列的值
# k折
kfold = model_selection.KFold(n_splits=5, random_state=2019)  # 切成5分  random_state:随机种子

# 创建投票器的子模型
estimators = []
# 初始化一个逻辑回归模型
model_1 = LogisticRegression()
estimators.append(('logistic', model_1))
# 决策树模型
model_2 = DecisionTreeClassifier()
estimators.append(('dt', model_2))
# SVM模型
model_3 = SVC()
estimators.append(('svm', model_3))

# 构建投票器融合
ensemble = VotingClassifier(estimators)
result = model_selection.cross_val_score(ensemble, X, Y, cv=kfold)  # cv:划分通过k折交叉验证


result.mean()  # 产出了5个结果 取平均 得到以下准确率

结果 :0.7774127832951362

Bagging

from sklearn.ensemble import BaggingClassifier
#  决策树
dt = DecisionTreeClassifier()
num = 100  # 取100个模型做融合
# k折
kfold = model_selection.KFold(n_splits=5, random_state=2019)  # 随机种子random_state
# 初始化bagging模型
model = BaggingClassifier(base_estimator=dt, n_estimators=num, random_state=2019)
result = model_selection.cross_val_score(model, X, Y, cv=kfold)
#告诉它基模型:决策树  用多少个模型集成:100

result.mean()

RandomForest

from sklearn.ensemble import RandomForestClassifier

num_trees = 100        #有100棵树
max_feature_num = 5    #每棵树采样5个样本
kfold = model_selection.KFold(n_splits=5, random_state=2019)
model = RandomForestClassifier(n_estimators=num_trees, max_features=max_feature_num)
result = model_selection.cross_val_score(model, X, Y, cv=kfold)

result.mean()

结果:0.7630931160342925

Adaboost

from sklearn.ensemble import AdaBoostClassifier
num_trees = 25  # 超参数 网格搜索去调
kfold = model_selection.KFold(n_splits=5, random_state=2020)
model = AdaBoostClassifier(n_estimators=num_trees, random_state=2020)
result = model_selection.cross_val_score(model, X, Y, cv=kfold)


result.mean()

结果:0.7513623631270689