generated from LufsX/Experiment-LogReg
This commit is contained in:
+15
-44
@@ -1,4 +1,5 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
from sklearn.impute import SimpleImputer
|
from sklearn.impute import SimpleImputer
|
||||||
from sklearn.feature_selection import SelectKBest, f_classif
|
from sklearn.feature_selection import SelectKBest, f_classif
|
||||||
|
|
||||||
@@ -6,52 +7,22 @@ from sklearn.feature_selection import SelectKBest, f_classif
|
|||||||
id = "202210423213"
|
id = "202210423213"
|
||||||
name = " 熊浩燃"
|
name = " 熊浩燃"
|
||||||
|
|
||||||
def load_data(filepath, k_features=20):
|
def load_data(filepath):
|
||||||
"""
|
"""
|
||||||
从文件中加载数据并进行预处理,包括缺失值填充和特征选择。
|
从文件中加载数据,填充缺失值,并进行特征处理。
|
||||||
|
|
||||||
Args:
|
|
||||||
- filepath (str): 数据文件路径。
|
|
||||||
- k_features (int): 选择的特征数量。
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
- np.array: 特征数据。
|
|
||||||
- np.array: 标签数据。
|
|
||||||
"""
|
"""
|
||||||
data = []
|
# 使用pandas读取数据,处理缺失值
|
||||||
labels = []
|
df = pd.read_csv(filepath, delim_whitespace=True, header=None)
|
||||||
with open(filepath, 'r') as file:
|
# 将问号替换为NaN,并填充为0
|
||||||
for line in file:
|
df.replace('?', 0, inplace=True)
|
||||||
line = line.strip().split()
|
df = df.astype(float) # 转换为浮点数类型
|
||||||
if line:
|
# 将最后一列设置为标签
|
||||||
features = []
|
labels = df.iloc[:, -1].values.astype(int)
|
||||||
for feature in line[:-1]: # 最后一个元素是标签
|
labels[(labels == 2) | (labels == 3)] = 0 # 合并死亡和安乐死为0
|
||||||
try:
|
# data = df.drop(columns=[2] + list(range(23, 28))).values # 删除不相关特征
|
||||||
features.append(float(feature))
|
# 数据标准化
|
||||||
except ValueError:
|
scaler = StandardScaler()
|
||||||
features.append(np.nan) # 用 NaN 表示缺失值
|
data = scaler.fit_transform(data)
|
||||||
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)
|
|
||||||
|
|
||||||
return data, labels
|
return data, labels
|
||||||
|
|
||||||
def sigmoid(z):
|
def sigmoid(z):
|
||||||
|
|||||||
Reference in New Issue
Block a user