From 0a88f8792cf46eff813789057a871b1d6124a98d Mon Sep 17 00:00:00 2001 From: Xionghaoran <719929980@qq.com> Date: Thu, 31 Oct 2024 17:22:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20function.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- function.py | 59 ++++++++++++++--------------------------------------- 1 file changed, 15 insertions(+), 44 deletions(-) diff --git a/function.py b/function.py index 7337ce1..87d09b9 100644 --- a/function.py +++ b/function.py @@ -1,4 +1,5 @@ import numpy as np +import pandas as pd from sklearn.impute import SimpleImputer from sklearn.feature_selection import SelectKBest, f_classif @@ -6,52 +7,22 @@ from sklearn.feature_selection import SelectKBest, f_classif id = "202210423213" name = " 熊浩燃" -def load_data(filepath, k_features=20): +def load_data(filepath): """ - 从文件中加载数据并进行预处理,包括缺失值填充和特征选择。 - - Args: - - filepath (str): 数据文件路径。 - - k_features (int): 选择的特征数量。 - - Returns: - - np.array: 特征数据。 - - np.array: 标签数据。 + 从文件中加载数据,填充缺失值,并进行特征处理。 """ - data = [] - labels = [] - with open(filepath, 'r') as file: - for line in file: - line = line.strip().split() - if line: - features = [] - for feature in line[:-1]: # 最后一个元素是标签 - try: - features.append(float(feature)) - except ValueError: - features.append(np.nan) # 用 NaN 表示缺失值 - label = int(line[-1]) - data.append(features) - labels.append(label) - - # 转换为 numpy 数组 - data = np.array(data) - labels = np.array(labels) - - # 使用SimpleImputer填充NaN - imputer = SimpleImputer(strategy='mean') - data = imputer.fit_transform(data) - - # 特征标准化,避免除零错误 - mean = data.mean(axis=0) - std_dev = data.std(axis=0) - std_dev[std_dev == 0] = 1 # 如果标准差为0,将其设为1,避免除以零 - data = (data - mean) / std_dev - - # 特征选择 - selector = SelectKBest(f_classif, k=k_features) - data = selector.fit_transform(data, labels) - + # 使用pandas读取数据,处理缺失值 + df = pd.read_csv(filepath, delim_whitespace=True, header=None) + # 将问号替换为NaN,并填充为0 + df.replace('?', 0, inplace=True) + df = df.astype(float) # 转换为浮点数类型 + # 将最后一列设置为标签 + labels = df.iloc[:, -1].values.astype(int) + labels[(labels == 2) | (labels == 3)] = 0 # 合并死亡和安乐死为0 + # data = df.drop(columns=[2] + list(range(23, 28))).values # 删除不相关特征 + # 数据标准化 + scaler = StandardScaler() + data = scaler.fit_transform(data) return data, labels def sigmoid(z):