基于numpy设计实现多个logistic regression二分类器,并通过如下所示“分类器投票”实现最终预测分类。 并可视化数据集,以及分类器分隔界面
时间: 2024-09-28 14:07:27 浏览: 32
基于jupyter notebook的python编程—–机器学习中的线性分类器及相应判定方法(鸢尾花数据集的分类可视化)
5星 · 资源好评率100%
在Python中,我们可以利用NumPy库来进行数值计算,Pandas处理数据,Scikit-learn构建机器学习模型,包括Logistic Regression。首先,我们需要导入所需的库并准备数据。假设我们有一个二分类任务的数据集,比如Iris数据集。
```python
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
from sklearn.pipeline import Pipeline
import matplotlib.pyplot as plt
# 加载Iris数据集
iris = datasets.load_iris()
X = iris.data[:, :2] # 我们只取前两维度用于简单示例
y = (iris.target == 0).astype(int) # 将目标变量转换为二分类
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 定义多个分类器,这里举例三个
classifiers = [
('lr1', LogisticRegression()),
('lr2', LogisticRegression(solver='lbfgs')),
('lr3', LogisticRegression(max_iter=500)),
]
# 创建分类器管道,包含标准化和分类器
pipelines = [Pipeline([('scaler', StandardScaler()), ('classifier', clf)]) for clf in classifiers]
# 训练模型
for pipeline in pipelines:
pipeline.fit(X_train, y_train)
# 预测
y_pred = np.empty((len(y_test), len(classifiers)), dtype=int)
for i, pipeline in enumerate(pipelines):
y_pred[:, i] = pipeline.predict(X_test)
# 投票决定最终分类
final_predictions = np.argmax(y_pred, axis=1)
# 准确率评估
accuracy = accuracy_score(y_test, final_predictions)
print(f"Accuracy using classifier voting: {accuracy * 100:.2f}%")
# 可视化
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='viridis')
for i, (pipeline_name, _) in enumerate(classifiers):
decision_boundary = X_test[(y_pred[:, i] == 1).reshape(-1, 1)]
plt.plot(decision_boundary[:, 0], decision_boundary[:, 1], linestyle='--', color='black', label=pipeline_name)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Classifier Decision Boundaries')
plt.legend()
plt.show()
```
在这个例子中,我们创建了三个基于Logistic Regression的分类器,并通过它们对测试样本进行投票,最后根据多数规则确定类别。同时,我们还展示了每个分类器在二维空间中的决策边界,以便直观理解它们在数据集上的区分效果。
阅读全文