模型融合
模型融合的方法介绍
简单加权平均
平均法(Averaging)(针对回归问题)
平均法分为简单算术平均与加权算术平均法
简单算术平均法:对多个模型预测结果进行平均:
加权算术平均法:对模型的重要度设置不同的权重:
投票法(Voting)(针对分类问题)
投票法指的是:针对分类问题,在基学习器上得到一个投票的分类器,将票数最多的类作为预测的结果
绝对多数投票法:最终结果占投票一半以上
相对多数投票法:最终结果在投票中票数最多
加权投票法:对模型结果的相对重要度设置权重,计算最终结果
硬投票:不区分模型结果的相对重要度,最终投票数最多的类为最终被预测的类
软投票:为不同模型设置不同的权重,区别模型的不同重要度
sklearn中的投票法示例:
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import VotingClassifier
model1 = LogisticRegression(random_state=2020)
model2 = DecisionTreeClassifier(random_state=2020)
model = VotingClassifier(estimators=[('lr', model1), ('dt', model2)], voting='hard')
boosting/bagging方法
Bagging采用有放回的采样方法选取训练集,进行T轮采样,采集到T个包含m个样本的数据集,从而训练出T个基学习器,最终对这T个基学习器的输出进行结合。
boosting方法:增加了前一个基学习器在训练过程中预测错误样本的权重
stacking/blending方法
堆叠法(Stacking)
利用初始训练数据学习若干基学习器,将这几个学习器的预测结果作为新的训练集,训练新的学习器
针对各个模型的讲解
https://blog.csdn.net/abcdefg90876/article/details/105383890?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161926669516780255245370%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161926669516780255245370&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-4-105383890.first_rank_v2_pc_rank_v29&utm_term=%E7%AE%80%E5%8D%95%E5%8A%A0%E6%9D%83%E8%9E%8D%E5%90%88
代码部分
导入所需包:
import pandas as pd
import numpy as np
from sklearn.metrics import classification_report, f1_score
from sklearn.model_selection import StratifiedKFold, KFold, train_test_split
from sklearn.ensemble import RandomForestClassifier,RandomForestRegressor
from sklearn.ensemble import VotingClassifier
import lightgbm as lgb
from sklearn.linear_model import LogisticRegression
数据转换,处理Dataframe的内存
'''
数据转换,处理大数据节省内存
'''
def reduce_mem_usage(df):
start_mem = df.memory_usage().sum() / 1024 ** 2
print('Memory usage of dataframe is {:.2f} MB'.format(start_mem))
for col in df.columns:
col_type = df[col].dtype
if col_type != object:
c_min = df[col].min()
c_max = df[col].max()
if str(col_type)[: 3] ==