Customer_ID Warehouse_block Mode_of_Shipment Customer_care_calls Customer_rating Cost_of_the_Product Prior_purchases Product_importance Gender Discount_offered Weight_in_gms ReachOnTime 0 1 D Flight 4 2 177 3 low F 44 1233 1 1 2 F Flight 4 5 216 2 low M 59 3088 1 2 3 A Flight 2 2 183 4 low M 48 3374 1 3 4 B Flight 3 3 176 4 medium M 10 1177 1 4 6 F Flight 3 1 162 3 medium F 12 1417 1 ... ... ... ... ... ... ... ... ... ... ... ... ... 9994 10994 F Ship 5 1 257 6 low F 1 1150 0 9995 10995 A Ship 4 1 252 5 medium F 1 1538 1 9996 10996 B Ship 4 1 232 5 medium F 6 1247 0 9997 10997 C Ship 5 4 242 5 low F 4 1155 0 9998 10999 D Ship 2 5 155 5 low 数据集的标签(ReachOnTime=1、0)量级是否不平衡,可以考虑数据预处理之后 进行抽样以解决数据不平衡的问题,SMOTE 算法代码实现
时间: 2024-02-11 17:09:37 浏览: 85
kc.rar_KC库存系统_inventory warehouse_warehouse order_仓库
好的,针对这个数据集进行 SMOTE 抽样的 Python 代码实现如下:
``` python
import pandas as pd
from imblearn.over_sampling import SMOTE
# 读取数据集
df = pd.read_csv('data.csv')
# 将分类变量转换为数值变量
df['Gender'] = df['Gender'].map({'M': 0, 'F': 1})
df['Warehouse_block'] = df['Warehouse_block'].map({'A': 0, 'B': 1, 'C': 2, 'D': 3, 'F': 4})
df['Mode_of_Shipment'] = df['Mode_of_Shipment'].map({'Flight': 0, 'Ship': 1, 'Road': 2})
df['Product_importance'] = df['Product_importance'].map({'low': 0, 'medium': 1, 'high': 2})
# 划分特征和标签
X = df.drop('ReachOnTime', axis=1)
y = df['ReachOnTime']
# 进行 SMOTE 抽样
sm = SMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X, y)
# 将抽样后的数据集保存到文件中
resampled_df = pd.concat([X_res, y_res], axis=1)
resampled_df.to_csv('resampled_data.csv', index=False)
```
其中,使用了 `imblearn` 库中的 `SMOTE` 类进行抽样,将分类变量转换为数值变量,将特征和标签分别存储到 `X` 和 `y` 变量中,然后调用 `SMOTE` 类的 `fit_resample` 方法进行抽样,将抽样后的数据集保存到文件中。
需要注意的是,抽样后应该检查数据集的平衡性,确保少数类样本数量增加,多数类样本数量不变。
阅读全文