当前位置: 首页 > article >正文

使用集成学习对不同的机器学习方法进行集成

数据入口:数据人才的现场调研 - Heywhale.com

本数据集中有 43 行,19 列,数据集包含如下字段:

首先读取数据:

import pandas as pd

# 读取Excel文件
data = pd.read_excel('数据人才的现场调研.xls')

可以输出每一列含有的不同的值:

# 打印每一列的唯一值
for column in data.columns:
    print(f"Unique values in {column}:")
    print(data[column].unique())

一:特征选择

# 找出含有不同数值小于 5 的列
columns_to_encode = [col for col in data.columns if len(data[col].unique()) < 5 and col!= '11、您对于目前数据团队的工作是否满意']

# 对选定的列进行独热编码
encoded_data = pd.get_dummies(data[columns_to_encode])


encoded_data = encoded_data.astype(int)
# 对“11、您对于目前数据团队的工作是否满意”列进行处理
data['11、您对于目前数据团队的工作是否满意'] = data['11、您对于目前数据团队的工作是否满意'].map({'满意': 1, '一般': 0,'不满意':'0','尚未建立数据团队': 0})


# 合并独热编码后的数据和处理后的“11、您对于目前数据团队的工作是否满意”列
result = pd.concat([encoded_data, data['11、您对于目前数据团队的工作是否满意']], axis=1)
result = result.astype(int)
result

独热编码后的数据的一部分如下:

这段代码将数据框中的某些分类变量转换为数值形式,使其适合用于机器学习模型。独热编码用于类别较少的变量,而特定列则使用自定义映射进行转换。最终,这些处理过的数据被合并并转换为统一的整数类型。

二:决策树

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score


# 分离特征和目标变量
X = result.drop('11、您对于目前数据团队的工作是否满意', axis=1)  # 假设 '11、您对于目前数据团队的工作是否满意' 是目标变量
y = result['11、您对于目前数据团队的工作是否满意']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建决策树模型
model = DecisionTreeClassifier()

# 训练模型
model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

得出决策树预测准确率约为0.67。

三:xgboost 

import xgboost as xgb
from sklearn.model_selection import train_test_split

# 分离特征和目标变量
X = result.drop('11、您对于目前数据团队的工作是否满意', axis=1)
y = result['11、您对于目前数据团队的工作是否满意']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建 XGBoost 分类器
model = xgb.XGBClassifier()

# 训练模型
model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# 可以进行后续的评估和分析

得出xgboost预测准确率约为0.78.

四:集成学习

可以使用集成学习的方法将决策树和 XGBoost 两个模型进行集成,例如使用投票集成(Voting Ensemble)或堆叠集成(Stacking Ensemble)。

以下是一个使用投票集成的示例代码:

from sklearn.ensemble import VotingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 创建投票集成模型
ensemble_model = VotingClassifier(estimators=[('decision_tree', decision_tree), ('xgb', xgb_model)], voting='hard')

# 训练集成模型
ensemble_model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = ensemble_model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

在上述代码中,我们创建了决策树和 XGBoost 两个模型,并将它们作为基模型放入投票集成模型中。投票集成模型通过硬投票的方式结合两个模型的预测准确率约为0.89,模型的预测效果比当模型较好。

补充:特征工程

除了独热编码外,在特征工程中,可以进行以下一些常见的处理:

  1. 数据清洗:处理缺失值、异常值、重复值等。
  2. 特征选择:选择与目标变量相关的重要特征,减少无关特征的影响。
  3. 特征提取:从原始数据中提取新的特征,例如通过文本数据提取词袋特征、使用主成分分析(PCA)进行特征降维等。
  4. 特征缩放:对特征进行标准化或归一化处理,使不同特征具有可比性。
  5. 编码处理:对类别型特征进行编码,如独热编码、标签编码等。
  6. 时间序列特征处理:如果数据是时间序列数据,可以提取时间相关的特征,如趋势、季节性等。
  7. 特征构建:根据领域知识和数据特点,构建新的特征,例如计算比率、差值、聚合统计等。
  8. 数据增强:通过数据扩充技术,增加数据的多样性,例如随机旋转、裁剪、翻转图像数据等。
  9. 特征转换:对特征进行数学变换,如对数变换、指数变换等,以改善数据的分布或满足模型的要求。

这些处理步骤可以帮助提高模型的性能和准确性,具体的处理方法应根据数据的特点和问题的需求来选择。

附录:每日股票行情数据
 

想要探索多元化的数据分析视角,可以关注之前发布的相关内容。


http://www.kler.cn/a/320972.html

相关文章:

  • 深入探索 Kubernetes 安全容器:Kata Containers 与 gVisor
  • 双子数(枚举素数)
  • uniapp h5地址前端重定向跳转
  • 部署Apache Doris
  • Docker占用空间太大磁盘空间不足清理妙招
  • unity小:shaderGraph不规则涟漪、波纹效果
  • AWS账单不支付账号会停用吗?
  • 拥塞控制算法的 rtt 公平性
  • webpack4 target:“electron-renderer“ 打包加速配置
  • python:django项目知识点01——前期配置、用户管理、权限核验、django-orm
  • C++之分割字符串的两种方式
  • CentOS Stream 9部署Redis
  • Docker 安装 Apache(图文教程)
  • FPGA学习--verlog基础语法篇
  • 【C++】入门基础知识-1
  • Redis篇(环境搭建)
  • Vue 3 中 Props 的使用指南
  • MySQL原理、设计与应用全面解析
  • 前端和后端的相对路径和绝对路径
  • 自动化测试常用函数:弹窗、等待、导航、上传与参数设置
  • oracle sql分组(group,根据多个内容分组)在select之后from之前 再进行select查询,复杂子查询的使用
  • 采购管理系统SRM助力电子元器件制造企业构建高效的供应商管理体系
  • JavaSE——lombok、juint单元测试、断言
  • 技术速递|宣布 Azure Container Apps 上的 Java 体验正式推出
  • java 抽奖程序结合数据库,redis实现
  • golang操作mysql利器-gorm