From 3819d14a13b52f7c7aa87a828f5d12a515113bb8 Mon Sep 17 00:00:00 2001 From: 43606070 <43606070@qq.com> Date: Thu, 31 Oct 2024 10:49:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20function.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- function.py | 50 +++++++++++--------------------------------------- 1 file changed, 11 insertions(+), 39 deletions(-) diff --git a/function.py b/function.py index 40c5549..e4a3502 100644 --- a/function.py +++ b/function.py @@ -1,14 +1,11 @@ import os import csv import numpy as np -import torch -import torch.nn as nn -import torch.optim as optim +import tensorflow as tf from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report, confusion_matrix, accuracy_score, roc_auc_score from sklearn.preprocessing import StandardScaler from imblearn.over_sampling import SMOTE -from torch.utils.data import DataLoader, TensorDataset # 读取 CSV 数据的函数 def load_data(file_path): @@ -37,15 +34,6 @@ def evaluate_model(y_true, y_pred, y_prob=None): auc = roc_auc_score(y_true, y_prob) print(f"AUC Score: {auc:.4f}") -# 定义逻辑回归模型 -class LogisticRegressionModel(nn.Module): - def __init__(self, input_dim): - super(LogisticRegressionModel, self).__init__() - self.linear = nn.Linear(input_dim, 1) # 线性层 - - def forward(self, x): - return torch.sigmoid(self.linear(x)) # 使用 Sigmoid 激活函数 - # 主函数 def main(): # 加载数据 @@ -64,37 +52,21 @@ def main(): X_train_res = scaler.fit_transform(X_train_res) X_test = scaler.transform(X_test) - # 将数据转换为 Tensor - X_train_tensor = torch.FloatTensor(X_train_res) - y_train_tensor = torch.FloatTensor(y_train_res).view(-1, 1) - X_test_tensor = torch.FloatTensor(X_test) - y_test_tensor = torch.FloatTensor(y_test).view(-1, 1) + # 创建 Keras 模型 + model = tf.keras.Sequential([ + tf.keras.layers.InputLayer(input_shape=(X_train_res.shape[1],)), + tf.keras.layers.Dense(1, activation='sigmoid') # 逻辑回归输出 + ]) - # 创建数据加载器 - train_dataset = TensorDataset(X_train_tensor, y_train_tensor) - train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) - - # 初始化模型、损失函数和优化器 - input_dim = X_train_res.shape[1] - model = LogisticRegressionModel(input_dim) - criterion = nn.BCELoss() # 二元交叉熵损失 - optimizer = optim.SGD(model.parameters(), lr=0.01) + # 编译模型 + model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # 训练模型 - model.train() - for epoch in range(100): # 训练 100 个 epoch - for inputs, labels in train_loader: - optimizer.zero_grad() - outputs = model(inputs) - loss = criterion(outputs, labels) - loss.backward() - optimizer.step() + model.fit(X_train_res, y_train_res, epochs=100, batch_size=32, verbose=1) # 评估模型 - model.eval() - with torch.no_grad(): - y_pred_prob = model(X_test_tensor).numpy() - y_pred = (y_pred_prob > 0.5).astype(int) + y_pred_prob = model.predict(X_test).flatten() # 获取预测概率 + y_pred = (y_pred_prob > 0.5).astype(int) # 评估模型 evaluate_model(y_test, y_pred, y_pred_prob)