修改--修改数据处理时对target列的错误处理
This commit is contained in:
parent
e2fcde42f7
commit
5215666cea
@ -211,19 +211,27 @@ class DataProcessor:
|
||||
|
||||
processor = self.preprocessing_methods[method_name](**params)
|
||||
|
||||
# 分离特征和标签
|
||||
features = df.drop('target', axis=1)
|
||||
target = df['target']
|
||||
|
||||
# 根据不同类型的方法进行处理
|
||||
if method_name in ['IsolationForest', 'OneClassSVM', 'LocalOutlierFactor', 'EllipticEnvelope']:
|
||||
# 异常值检测方法
|
||||
mask = processor.fit_predict(df) != -1
|
||||
df = df[mask]
|
||||
mask = processor.fit_predict(features) != -1
|
||||
features = features[mask]
|
||||
target = target[mask]
|
||||
else:
|
||||
# 其他预处理方法
|
||||
df = pd.DataFrame(
|
||||
processor.fit_transform(df),
|
||||
columns=df.columns,
|
||||
index=df.index
|
||||
features = pd.DataFrame(
|
||||
processor.fit_transform(features),
|
||||
columns=features.columns,
|
||||
index=features.index
|
||||
)
|
||||
|
||||
# 重新组合特征和标签
|
||||
df = pd.concat([features, target], axis=1)
|
||||
|
||||
self.logger.info(f"Applied preprocessing method {method_name}")
|
||||
return df
|
||||
|
||||
@ -236,17 +244,21 @@ class DataProcessor:
|
||||
try:
|
||||
method_name = method['method_name']
|
||||
params = method.get('params', {})
|
||||
columns = method.get('columns', df.columns)
|
||||
columns = method.get('columns', df.drop('target', axis=1).columns) # 排除target列
|
||||
|
||||
if method_name not in self.feature_engineering_methods:
|
||||
raise ValueError(f"Unknown feature engineering method: {method_name}")
|
||||
|
||||
processor = self.feature_engineering_methods[method_name](**params)
|
||||
|
||||
# 分离特征和标签
|
||||
features = df.drop('target', axis=1)
|
||||
target = df['target']
|
||||
|
||||
# 根据不同类型的特征工程方法进行处理
|
||||
if method_name in ['LabelEncoder', 'OneHotEncoder']:
|
||||
# 编码方法
|
||||
df_temp = df[columns].copy()
|
||||
df_temp = features[columns].copy()
|
||||
if method_name == 'LabelEncoder':
|
||||
for col in columns:
|
||||
df_temp[col] = processor.fit_transform(df_temp[col])
|
||||
@ -256,17 +268,17 @@ class DataProcessor:
|
||||
encoded = pd.DataFrame(
|
||||
encoded,
|
||||
columns=[f"{col}_{i}" for col in columns for i in range(encoded.shape[1]//len(columns))],
|
||||
index=df.index
|
||||
index=features.index
|
||||
)
|
||||
df_temp = encoded
|
||||
|
||||
# 更新原始数据框
|
||||
df = df.drop(columns=columns)
|
||||
df = pd.concat([df, df_temp], axis=1)
|
||||
# 更新特征数据框
|
||||
features = features.drop(columns=columns)
|
||||
features = pd.concat([features, df_temp], axis=1)
|
||||
|
||||
elif method_name in ['KBinsDiscretizer']:
|
||||
# 离散化方法
|
||||
transformed = processor.fit_transform(df[columns])
|
||||
transformed = processor.fit_transform(features[columns])
|
||||
if processor.encode == 'onehot':
|
||||
feature_names = [f"{col}_{i}" for col in columns for i in range(processor.n_bins_)]
|
||||
else:
|
||||
@ -275,33 +287,36 @@ class DataProcessor:
|
||||
df_temp = pd.DataFrame(
|
||||
transformed,
|
||||
columns=feature_names,
|
||||
index=df.index
|
||||
index=features.index
|
||||
)
|
||||
df = df.drop(columns=columns)
|
||||
df = pd.concat([df, df_temp], axis=1)
|
||||
features = features.drop(columns=columns)
|
||||
features = pd.concat([features, df_temp], axis=1)
|
||||
|
||||
elif method_name in ['PCA', 'SelectKBest', 'RFE']:
|
||||
# 降维和特征选择方法
|
||||
transformed = processor.fit_transform(df[columns])
|
||||
transformed = processor.fit_transform(features[columns])
|
||||
n_features = transformed.shape[1]
|
||||
df_temp = pd.DataFrame(
|
||||
transformed,
|
||||
columns=[f"feature_{i}" for i in range(n_features)],
|
||||
index=df.index
|
||||
index=features.index
|
||||
)
|
||||
df = df.drop(columns=columns)
|
||||
df = pd.concat([df, df_temp], axis=1)
|
||||
features = features.drop(columns=columns)
|
||||
features = pd.concat([features, df_temp], axis=1)
|
||||
|
||||
else:
|
||||
# 其他特征工程方法
|
||||
transformed = processor.fit_transform(df[columns])
|
||||
transformed = processor.fit_transform(features[columns])
|
||||
df_temp = pd.DataFrame(
|
||||
transformed,
|
||||
columns=[f"{col}_transformed" for col in columns],
|
||||
index=df.index
|
||||
index=features.index
|
||||
)
|
||||
df = df.drop(columns=columns)
|
||||
df = pd.concat([df, df_temp], axis=1)
|
||||
features = features.drop(columns=columns)
|
||||
features = pd.concat([features, df_temp], axis=1)
|
||||
|
||||
# 重新组合特征和标签
|
||||
df = pd.concat([features, target], axis=1)
|
||||
|
||||
self.logger.info(f"Applied feature engineering method {method_name}")
|
||||
return df
|
||||
|
||||
Loading…
Reference in New Issue
Block a user