学习网站模板,wordpress商城模版,想要个免费网站,成都做公司网站推广数据预处理
通过网盘分享的文件#xff1a;银行流失预测数据和代码 链接: https://pan.baidu.com/s/1loiB8rMvZArfjJccu4KW6w?pwdpfcs 提取码: pfcs
非数值特征处理
目的#xff1a;将非数值特征转换为数值型#xff0c;以便模型能够处理。方法#xff1a; 地理位置银行流失预测数据和代码 链接: https://pan.baidu.com/s/1loiB8rMvZArfjJccu4KW6w?pwdpfcs 提取码: pfcs
非数值特征处理
目的将非数值特征转换为数值型以便模型能够处理。方法 地理位置可以使用独热编码One-Hot Encoding或标签编码Label Encoding将不同国家/地区转换为数值。性别可以使用标签编码将“男”和“女”分别编码为0和1。 结果文件保存为Churn-Modelling-newT.csv
数据离散化处理
目的将连续变量转换为离散变量简化模型复杂度提高模型的可解释性。方法 统计分析对连续数据进行描述性统计分析了解数据的分布情况。离散化方法 等宽离散化将数据分为等宽的区间。等频离散化将数据分为等频的区间。基于聚类的离散化使用聚类算法确定离散化的区间。 结果文件保存为Churn-Modelling-new-tree.csv
数据筛选
目的去除与模型训练无关的特征列保留有意义的数据解决数据不均衡问题。方法 特征筛选舍去如行号、用户编号、用户姓名等无关特征。数据平衡 过采样增加少数类别的样本数量。欠采样减少多数类别的样本数量。 结果文件保存为final.csv
数据分割
目的将数据集分为训练集和测试集用于模型训练和评估。方法按照4:1的比例分割数据集。结果文件 训练集Churn-Modelling-train.csv测试集Churn-Modelling-test.csv
数据集预览 数据特征列描述
RowNumber行号 CustomerID用户编号 Surname用户姓名 CreditScore信用分数 Geography用户所在国家/地区 Gender用户性别 Age年龄 Tenure当了本银行多少年用户 Balance存贷款情况 NumOfProducts使用产品数量 HasCrCard是否有本银行信用卡 IsActiveMember是否活跃用户 EstimatedSalary估计收入 Exited是否已流失作为标签数据
代码部分
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, KBinsDiscretizer
# 过采样与欠采样解决数据不均衡问题
from imblearn.over_sampling import RandomOverSampler
from imblearn.under_sampling import RandomUnderSampler# 读取数据
df pd.read_csv(Churn-Modelling.csv)# a) 非数值特征处理
# 地理位置 - 独热编码
geography_dummies pd.get_dummies(df[Geography], prefixGeography)
df pd.concat([df, geography_dummies], axis1)
df.drop(Geography, axis1, inplaceTrue)# 性别 - 标签编码
label_encoder LabelEncoder()
df[Gender] label_encoder.fit_transform(df[Gender])# 保存处理后的文件
df.to_csv(Churn-Modelling-newT.csv, indexFalse)# b) 数据离散化处理
# 信用分数、年龄、存贷款情况、估计收入 - 等宽离散化
discretizer KBinsDiscretizer(n_bins5, encodeordinal, strategyuniform)
columns_to_discretize [CreditScore, Age, Balance, EstimatedSalary]
df[columns_to_discretize] discretizer.fit_transform(df[columns_to_discretize])# 保存处理后的文件
df.to_csv(Churn-Modelling-new-tree.csv, indexFalse)# c) 数据筛选
# 去除无关特征列
df.drop([RowNumber, Customerid, Surname], axis1, inplaceTrue)X df.drop(Exited, axis1)
y df[Exited]# 过采样
over_sampler RandomOverSampler(sampling_strategy0.5)
X_over, y_over over_sampler.fit_resample(X, y)# 欠采样
under_sampler RandomUnderSampler(sampling_strategy0.8)
X_resampled, y_resampled under_sampler.fit_resample(X_over, y_over)# 保存筛选后的文件
final_df pd.concat([X_resampled, y_resampled], axis1)
final_df.to_csv(final.csv, indexFalse)# d) 数据分割
X_train, X_test, y_train, y_test train_test_split(X_resampled, y_resampled, test_size0.2, random_state42)train_df pd.concat([X_train, y_train], axis1)
test_df pd.concat([X_test, y_test], axis1)train_df.to_csv(Churn-Modelling-train.csv, indexFalse)
test_df.to_csv(Churn-Modelling-test.csv, indexFalse)小注
要查看LabelEncoder是如何将类别值映射到整数的你可以使用LabelEncoder对象的classes_属性。这个属性是一个数组包含了原始类别值的排序列表其索引位置对应于转换后的整数值。
以下是如何查看性别类别值映射的方法
label_encoder LabelEncoder()
df[Gender] label_encoder.fit_transform(df[Gender])# 查看类别值的映射
print(label_encoder.classes_)假设df[Gender]列包含两个唯一值Male和FemaleLabelEncoder会根据它们在数据中出现的顺序进行排序通常是字典序然后进行编码。例如如果输出是
[Female Male]这意味着Female被编码为0Male被编码为1。如果顺序相反那么Male将被编码为0Female被编码为1。
如果你想要明确地指定编码方式可以使用map函数手动设置映射
# 假设我们想要将Male编码为0Female编码为1
gender_mapping {Male: 0, Female: 1}
df[Gender] df[Gender].map(gender_mapping)这样就可以确保Male总是被编码为0Female总是被编码为1。