generated from LufsX/Experiment-LogReg
This commit is contained in:
+7
-20
@@ -31,7 +31,6 @@ def sigmoid(z):
|
||||
return 1 / (1 + np.exp(-z))
|
||||
|
||||
def train_logreg(X, y, learning_rate=0.001, iterations=500, batch_size=16, initial_weights=None):
|
||||
X = np.insert(X, 0, 1, axis=1) # 添加偏置项
|
||||
if initial_weights is None:
|
||||
weights = np.zeros(X.shape[1])
|
||||
else:
|
||||
@@ -69,7 +68,7 @@ def train_logreg(X, y, learning_rate=0.001, iterations=500, batch_size=16, initi
|
||||
|
||||
|
||||
def predict_logreg(inX, weights):
|
||||
inX = np.insert(inX, 0, 1) # 添加偏置项
|
||||
|
||||
z = np.dot(inX, weights)
|
||||
h = sigmoid(z)
|
||||
return 1 if h >= 0.5 else 0
|
||||
@@ -117,26 +116,15 @@ def load_data(filepath):
|
||||
data = [line.strip().split() for line in lines]
|
||||
data = [list(map(lambda x: float(x) if x != '?' else np.nan, row)) for row in data]
|
||||
|
||||
# 移除类别标签缺失的样本
|
||||
data = [row for row in data if row[-1] != np.nan]
|
||||
|
||||
# 使用“0”填充缺失值
|
||||
for row in data:
|
||||
for i in range(len(row)):
|
||||
# 处理缺失值,这里简单用平均值填充
|
||||
for i in range(len(data[0])):
|
||||
mean_val = np.nanmean([row[i] for row in data if not np.isnan(row[i])])
|
||||
for row in data:
|
||||
if np.isnan(row[i]):
|
||||
row[i] = 0.0
|
||||
|
||||
# 合并特征23的值2和3为0
|
||||
for row in data:
|
||||
if row[22] == 2 or row == 3: # 假设特征23是第23个元素
|
||||
row[22] = 0
|
||||
|
||||
# 移除不需要的特征
|
||||
# 假设特征从0开始编号,那么我们需要移除特征3和特征24~28
|
||||
data = [row[:2] + row[3:23] + row[28:] for row in data]
|
||||
row[i] = mean_val
|
||||
|
||||
# 分离特征和标签
|
||||
X = [row[:-1] for row in data] # 特征现在是从0到21,然后是23到27
|
||||
X = [row[:-1] for row in data]
|
||||
y = [row[-1] for row in data]
|
||||
|
||||
return np.array(X), np.array(y)
|
||||
@@ -152,7 +140,6 @@ def load_data(filepath):
|
||||
"""
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 以下代码可用于测试,可自行随意修改
|
||||
# 加载训练集
|
||||
X_train, y_train = load_data("./data/horse-colic.data")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user