generated from LufsX/Experiment-LogReg
This commit is contained in:
+15
-44
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user