diff --git a/function.py b/function.py index 5d7a411..6bbbaad 100644 --- a/function.py +++ b/function.py @@ -26,71 +26,43 @@ name = "周佳成" # 这里写自己的代码实现 -import numpy as np import pandas as pd -from sklearn.linear_model import LogisticRegression +import numpy as np from sklearn.model_selection import train_test_split -from sklearn.metrics import accuracy_score - -# 加载数据 -def load_data(train_url, test_url): - # 由于直接下载数据并读取可能涉及网络连接,这里假设数据已下载并保存在本地路径 - # 用户需根据实际情况修改路径或实现数据下载逻辑 - train_data = pd.read_csv(train_url, sep='\s+', header=None, na_values='?') - test_data = pd.read_csv(test_url, sep='\s+', header=None, na_values='?') - return train_data, test_data - -# 数据预处理 -def preprocess_data(data): - # 用0填充缺失值 - data.fillna(0, inplace=True) - - # 选择特征23作为目标变量,将其取值2和3合并为一个值0(死亡) - data[22] = data[22].apply(lambda x: 0 if x in [2, 3] else 1) - - # 去掉特征3、特征24~28 - data = data.drop([2, 23, 24, 25, 26, 27, 28], axis=1) - - # 特征和标签分离 - X = data.iloc[:, :-1] # 所有行,除了最后一列(目标变量) - y = data.iloc[:, -1] # 所有行,最后一列(目标变量) - - return X, y - +from sklearn.linear_model import LogisticRegression +from sklearn.metrics import accuracy_score, classification_report + +# 读取数据 +data_path = 'C:\\Users\\star\\Desktop\\机器学习\\experiment-log\\data\\horse-colic.data' +data = pd.read_csv(data_path, header=None, delim_whitespace=True, na_values='?') + +# 处理缺失值(用0填充) +data.fillna(0, inplace=True) + +# 选择特征和目标变量 +# 去掉特征3和特征24~28 +features = data.iloc[:, :-5].values # 假设最后一列是目标变量,前面的都是特征 +target = data.iloc[:, -1].values + +# 将目标变量中的2和3合并为0 +target[target == 2] = 0 +target[target == 3] = 0 + +# 将目标变量转换为二进制分类(0或1) +target = (target == 1).astype(int) + +# 划分训练集和测试集 +X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42) + # 训练对率回归模型 -def train_logreg(X_train, y_train): - model = LogisticRegression(max_iter=10000) # 设置默认迭代次数以避免警告 - model.fit(X_train, y_train) - return model - -# 使用对率回归模型进行预测 -def predict_logreg(model, X_test): - y_pred = model.predict(X_test) - return y_pred - -# 主函数(用于演示整个流程) -def main(): - # 数据集URL(这里使用本地路径,实际使用时需替换为网络URL或下载后的路径) - train_url = 'path_to_train_data.csv' # 训练数据路径 - test_url = 'path_to_test_data.csv' # 测试数据路径 - - # 加载数据 - train_data, test_data = load_data(train_url, test_url) - - # 数据预处理 - X_train, y_train = preprocess_data(train_data) - X_test, y_test = preprocess_data(test_data) - - # 划分训练集和验证集(如果需要的话,这里仅作为示例) - # X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42) - - # 训练对率回归模型 - model = train_logreg(X_train, y_train) - - # 进行预测 - y_pred = predict_logreg(model, X_test) - - # 计算准确率 - accuracy = accuracy_score(y_test, y_pred) +model = LogisticRegression(max_iter=1000) +model.fit(X_train, y_train) +# 预测并评估模型 +y_pred = model.predict(X_test) +accuracy = accuracy_score(y_test, y_pred) +report = classification_report(y_test, y_pred) +print(f"Accuracy: {accuracy:.2f}") +print("Classification Report:") +print(report)