使用集成学习对不同的机器学习方法进行集成
数据入口:数据人才的现场调研 - 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,模型的预测效果比当模型较好。
补充:特征工程
除了独热编码外,在特征工程中,可以进行以下一些常见的处理:
- 数据清洗:处理缺失值、异常值、重复值等。
- 特征选择:选择与目标变量相关的重要特征,减少无关特征的影响。
- 特征提取:从原始数据中提取新的特征,例如通过文本数据提取词袋特征、使用主成分分析(PCA)进行特征降维等。
- 特征缩放:对特征进行标准化或归一化处理,使不同特征具有可比性。
- 编码处理:对类别型特征进行编码,如独热编码、标签编码等。
- 时间序列特征处理:如果数据是时间序列数据,可以提取时间相关的特征,如趋势、季节性等。
- 特征构建:根据领域知识和数据特点,构建新的特征,例如计算比率、差值、聚合统计等。
- 数据增强:通过数据扩充技术,增加数据的多样性,例如随机旋转、裁剪、翻转图像数据等。
- 特征转换:对特征进行数学变换,如对数变换、指数变换等,以改善数据的分布或满足模型的要求。
这些处理步骤可以帮助提高模型的性能和准确性,具体的处理方法应根据数据的特点和问题的需求来选择。
附录:每日股票行情数据
想要探索多元化的数据分析视角,可以关注之前发布的相关内容。