generated from LufsX/Challenge-SVM
This commit is contained in:
+22
-6
@@ -31,6 +31,7 @@ name = "杨文强"
|
||||
def load_data(filepath):
|
||||
"""
|
||||
从文件中加载数据,并返回特征和标签。
|
||||
如果数据中包含 '?' 字符,将其处理为 NaN。
|
||||
|
||||
Args:
|
||||
- filepath (str): 数据文件路径。
|
||||
@@ -39,19 +40,34 @@ def load_data(filepath):
|
||||
- np.array: 特征数据。
|
||||
- np.array: 标签数据。
|
||||
"""
|
||||
data = np.loadtxt(filepath, delimiter=" ", dtype=str)
|
||||
# 读取数据,指定将 '?' 转换为 np.nan
|
||||
data = np.genfromtxt(filepath, delimiter=" ", dtype=str, missing_values='?', filling_values=np.nan)
|
||||
|
||||
X = []
|
||||
y = []
|
||||
|
||||
for row in data:
|
||||
features = row[:-1].astype(float) # 特征数据
|
||||
label = int(row[-1]) # 标签数据 (0 或 1)
|
||||
features = row[:-1] # 特征数据
|
||||
label = row[-1] # 标签数据
|
||||
|
||||
# 转换标签为 +1 或 -1
|
||||
y.append(1 if label == 1 else -1)
|
||||
# 将特征中的 '?' 替换为 NaN,后续可以选择删除这些行或填充NaN值
|
||||
features = [float(x) if x != '?' else np.nan for x in features]
|
||||
|
||||
# 标签的处理:确保标签是 1 或 -1
|
||||
label = int(label) # 标签需要转换为整数 1 或 0
|
||||
y.append(1 if label == 1 else -1) # 将标签转换为 +1 或 -1
|
||||
X.append(features)
|
||||
|
||||
return np.array(X), np.array(y)
|
||||
X = np.array(X)
|
||||
y = np.array(y)
|
||||
|
||||
# 处理缺失值:可以选择删除含有NaN的样本
|
||||
# 这里是删除含有NaN的行
|
||||
valid_indices = ~np.isnan(X).any(axis=1)
|
||||
X = X[valid_indices]
|
||||
y = y[valid_indices]
|
||||
|
||||
return X, y
|
||||
|
||||
def train_svm(X, y, learning_rate=0.01, iterations=1000, regularization_param=0.01):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user