载入数据
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