diff --git a/docs/detail.md b/docs/detail.md new file mode 100644 index 0000000..705149c --- /dev/null +++ b/docs/detail.md @@ -0,0 +1 @@ +1.项目采用 python sklearn库开发. \ No newline at end of file diff --git a/logistic_regression.py b/logistic_regression.py new file mode 100644 index 0000000..2163b4e --- /dev/null +++ b/logistic_regression.py @@ -0,0 +1,58 @@ +# 导入必要的库 +import numpy as np +import matplotlib.pyplot as plt +from sklearn.datasets import load_iris +from sklearn.model_selection import train_test_split +from sklearn.preprocessing import StandardScaler +from sklearn.linear_model import LogisticRegression +from sklearn.metrics import accuracy_score, confusion_matrix, classification_report + +# 加载数据集 +iris = load_iris() +X = iris.data[:, :2] # 只使用前两个特征以便可视化 +y = (iris.target != 0) * 1 # 将目标变量转换为二分类问题(0和1) + +# 将数据集分为训练集和测试集 +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) + +# 特征标准化 +scaler = StandardScaler() +X_train = scaler.fit_transform(X_train) +X_test = scaler.transform(X_test) + +# 创建逻辑回归模型 +model = LogisticRegression() + +# 训练模型 +model.fit(X_train, y_train) + +# 在测试集上进行预测 +y_pred = model.predict(X_test) + +# 评估模型性能 +accuracy = accuracy_score(y_test, y_pred) +conf_matrix = confusion_matrix(y_test, y_pred) +class_report = classification_report(y_test, y_pred) + +print(f"Accuracy: {accuracy:.2f}") +print("Confusion Matrix:") +print(conf_matrix) +print("Classification Report:") +print(class_report) + +# 可视化决策边界 +def plot_decision_boundary(X, y, model): + h = .02 # 网格步长 + x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 + y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 + xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) + Z = model.predict(np.c_[xx.ravel(), yy.ravel()]) + Z = Z.reshape(xx.shape) + plt.contourf(xx, yy, Z, alpha=0.8) + plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o') + plt.xlabel('Feature 1') + plt.ylabel('Feature 2') + plt.title('Decision Boundary') + plt.savefig('./output/logistic.png') + +plot_decision_boundary(X_train, y_train, model) \ No newline at end of file diff --git a/output/logistic.png b/output/logistic.png new file mode 100644 index 0000000..e2b31ed Binary files /dev/null and b/output/logistic.png differ