什么是Pipeline?
简化代码:将多个数据处理步骤整合成一个整体,让代码更加简洁、易读。 提高效率:自动化地执行一系列处理步骤,省去手动重复操作的麻烦。 减少错误:一旦Pipeline设置完成,每次运行时都会执行相同的步骤,避免了因手动操作导致的错误。
Python中的Pipeline:scikit-learn中的应用
代码示例:使用Pipeline进行数据处理和模型训练
# 导入必要的库
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.svm import SVC
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score
import numpy as np
# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target
# 仅使用前两个特征(便于可视化)
X = X[:, :2]
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建一个Pipeline,包含数据标准化和支持向量机分类器
pipeline = Pipeline([
('scaler', StandardScaler()), # 数据标准化
('svm', SVC(kernel='linear')) # 使用线性核的支持向量机分类器
])
# 使用Pipeline进行训练
pipeline.fit(X_train, y_train)
# 预测测试集
y_pred = pipeline.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'模型的准确率:{accuracy:.2f}')
## 模型的准确率:0.90
# 可视化数据分布和决策边界
# 标准化之前的数据分布
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap='viridis', edgecolor='k', s=50)
plt.title('标准化之前的数据分布')
plt.xlabel('特征 1')
plt.ylabel('特征 2')
# 标准化之后的数据分布
scaler = StandardScaler().fit(X_train)
X_train_scaled = scaler.transform(X_train)
plt.subplot(1, 2, 2)
plt.scatter(X_train_scaled[:, 0], X_train_scaled[:, 1], c=y_train, cmap='viridis', edgecolor='k', s=50)
plt.title('标准化之后的数据分布')
plt.xlabel('标准化后的特征 1')
plt.ylabel('标准化后的特征 2')
plt.tight_layout()
plt.show()
# 绘制决策边界
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, cmap='viridis', alpha=0.3)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', edgecolor='k', s=50)
plt.xlabel('特征 1')
plt.ylabel('特征 2')
plt.title('决策边界')
# 可视化标准化后的数据与决策边界
plt.figure(figsize=(6, 6))
plot_decision_boundary(X_train_scaled, y_train, pipeline.named_steps['svm'])
plt.show()
加载和准备数据:首先,我们加载了鸢尾花数据集,并且为了简化可视化,我们只选择了前两个特征来做分析。 使用Pipeline:接着,我们创建了一个Pipeline,其中包含了两个步骤——数据标准化和支持向量机分类器。Pipeline让我们可以一步到位地完成数据标准化和模型训练。 训练和预测:使用Pipeline,我们对训练集进行了训练,然后对测试集进行了预测。最后,我们计算出了模型的准确率。 可视化:为了更直观地理解Pipeline的作用,我们绘制了标准化前后的数据分布图,并展示了支持向量机模型的决策边界。这样可以帮助我们更好地理解数据标准化对模型性能的影响,以及支持向量机如何将数据分类。
欢迎关注!