机器学习-集成学习

集成学习

"""
概述
	是机器学习的一种思想, 它通过多个模型的组合形成一个精度更高的模型, 参与组合的模型称为 弱学习器(基学习器)
"""

1. 学习分类

"""
学习分类
	Bagging
		随机森林
			采用决策树模型作为每一个弱学习器
			训练
				1. 有放回的产生训练样本
				2. 随机挑选n个特征
			预测
				平权投票, 多数表决输出预测结果
			API
				sklearn.ensemble.RandomForestClassifier
					n_estimators 决策树数量 default = 10
					Criterion: entropy 或者 gini default = gini
					max_depth: 指定树的最大深度, default=None
					max_features='auto' 决策树构建时使用的最大特征数量
						auto
						sqrt
						log2
						None
					bootstrap: 是否采用有放回抽样, 如果为False将会使用全部训练样本 default = True
				min_samples_split
					节点分裂所需最小样本数 default = 2
						如果节点样本数少于min_samples_split 则不在进行划分
						如果样本量不大, 不需要设置这个值
						如果样本量数量级非常大, 则推荐增大这个值
				min_samples_leaf
					叶子节点的最小样本数 default = 1
						如果某叶子节点数目小于样本数, 则会和兄弟节点一起被剪枝
						较小的叶子节点样本数量使模型更容易捉捕训练数据中的噪声
				min_impurity_split
					节点划分最小不纯度
						如果某节点的不纯度小于这个阈值, 则该节点不再生成子节点,并变为叶子节点
						一般不推荐改动 默认值 1e-7
		思想
			又称为装袋算法或自举汇聚法
			有放回的抽样产生不同的训练集, 从而训练不同的学习器
			通过平权投票, 多数表决的方式决定预测结果
				分类问题中, 会使用多数投票统计结果
				回归问题中, 会使用求平均值统计结果
			弱学习器可以并行训练
			算法模型
				Linear Ridge Lasso Logistic Softmax ID3 C4.5 CART SVM KNN
	Boosting
		思想
			每一个训练器重点关注前一个训练器不足的地方进行训练
			通过加权投票的方式 得出预测结果
			串行的训练方式
		算法模型
			Adaboost, GBDT, XGBoost, LightGBM
	对比
		数据采样
			Bagging
				对数据进行有放回的采样训练
			Boosting
				全部样本, 根据前一轮学习结果调整数据的重要性
		投票方式
			Bagging
				所有学习器平权投票
			Boosting
				对学习器进行加权投票
		学习顺序
			Bagging
				并行的, 每个学习器没有依赖关系
			Boosting
				串行, 学习有先后顺序
"""
# 1.导入依赖包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.metrics import classification_report
from sklearn.ensemble import RandomForestClassifier

import warnings
warnings.filterwarnings('ignore')

# 随机森林案例
def titanicCase():
    # 2.读数据到内存并预处理
    # 2.1 读取数据
    taitan_df = pd.read_csv("data/train.csv")
    print(taitan_df.head())  # 查看前5条数据
    print(taitan_df.info)  # 查看特性信息
    # 2.2 数据处理,确定x y
    x = taitan_df[['Pclass', 'Age', 'Sex']]
    y = taitan_df['Survived']
    # 2.3 缺失值处理
    x['Age'] = x['Age'].fillna(x['Age'].mean())
    print('x -->1', x.head(10))
    # 2.4 pclass类别型数据,需要转数值one-hot编码
    x = pd.get_dummies(x)
    print('x -->2', x.head(10))
    # 2.5 数据集划分
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.20, random_state
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值