以下是一个使用 scikit-learn
实现的 Logistic Regression 分类的例子,使用鸢尾花(Iris)数据集进行演示。
代码实现:
# 导入库
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data # 特征
y = iris.target # 标签
# 只选择两个类别进行二分类 (setosa 和 versicolor)
X = X[y != 2] # 排除掉类别 'virginica'
y = y[y != 2] # 只保留 'setosa' 和 'versicolor'
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建 Logistic Regression 模型
log_reg = LogisticRegression(solver='liblinear') # 使用 'liblinear' 求解器,适合小型数据集
# 训练模型
log_reg.fit(X_train, y_train)
# 进行预测
y_pred = log_reg.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"Logistic Regression 模型的准确率: {accuracy:.2f}")
# 打印分类报告
report = classification_report(y_test, y_pred, target_names=iris.target_names[:2])
print("分类报告:\n", report)
代码说明:
-
数据集加载:
- 使用
load_iris()
函数加载鸢尾花数据集,数据集包含 150 个样本,4 个特征和 3 个类别。 - 为了演示 Logistic Regression,只选择两个类别进行二分类(
setosa
和versicolor
),剔除第三个类别virginica
。
- 使用
-
数据集划分:
- 使用
train_test_split
将数据集划分为训练集(80%)和测试集(20%)。
- 使用
-
创建 Logistic Regression 模型:
LogisticRegression
是scikit-learn
提供的逻辑回归模型。solver='liblinear'
:由于鸢尾花数据集较小,使用liblinear
求解器进行训练。
-
训练和预测:
- 使用
fit
方法训练模型。 - 使用
predict
方法对测试集进行预测。
- 使用
-
模型评估:
- 使用
accuracy_score
计算模型的准确率。 - 使用
classification_report
打印分类报告,包括精确度(Precision)、召回率(Recall)、F1 分数等指标。
- 使用
结果:
输出将显示模型的准确率以及分类报告,例如:
Logistic Regression 模型的准确率: 1.00
分类报告:
precision recall f1-score support
setosa 1.00 1.00 1.00 10
versicolor 1.00 1.00 1.00 10
accuracy 1.00 20
macro avg 1.00 1.00 1.00 20
weighted avg 1.00 1.00 1.00 20
在这个示例中,逻辑回归模型对鸢尾花数据集上的二分类问题表现出色,达到 100% 的准确率。Logistic Regression 适用于二分类问题,能够通过最大化数据点的对数似然估计找到最佳分隔超平面。