Scikit-learn 1.5实战:3行代码完成K-Means聚类与逻辑回归分类

📅 2026/7/9 1:56:44 👁️ 阅读次数 📝 编程学习
Scikit-learn 1.5实战:3行代码完成K-Means聚类与逻辑回归分类

Scikit-learn 1.5实战:3行代码完成K-Means聚类与逻辑回归分类

在数据科学领域,Scikit-learn作为Python最受欢迎的机器学习库之一,以其简洁的API设计和高效的算法实现著称。本文将聚焦两个核心机器学习任务:无监督学习中的K-Means聚类与监督学习中的逻辑回归分类,通过实际代码演示如何用极简代码实现强大功能。

1. 环境准备与数据加载

在开始前,确保已安装最新版Scikit-learn(1.5+)及必要依赖库:

pip install scikit-learn matplotlib numpy

我们将使用经典的鸢尾花数据集作为示例,该数据集包含150个样本,每个样本有4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和对应的3种鸢尾花类别。

from sklearn.datasets import load_iris iris = load_iris() X, y = iris.data, iris.target

提示:鸢尾花数据集是机器学习入门的标准数据集,其特征量纲一致,无需额外标准化处理。

2. K-Means聚类实战

K-Means是最常用的聚类算法之一,其核心思想是通过迭代将数据划分为K个簇,使得每个点到其所属簇中心的距离最小。

2.1 三行代码实现聚类

from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=3, random_state=42) clusters = kmeans.fit_predict(X)

关键参数说明:

  • n_clusters: 指定簇的数量(此处设为3以匹配真实类别数)
  • random_state: 确保结果可复现

2.2 结果可视化

通过二维散点图观察聚类效果:

import matplotlib.pyplot as plt plt.scatter(X[:, 0], X[:, 1], c=clusters, cmap='viridis') plt.xlabel('Sepal Length') plt.ylabel('Sepal Width') plt.title('K-Means Clustering Results') plt.show()

2.3 模型评估

虽然聚类是无监督学习,但我们仍可通过轮廓系数评估效果:

from sklearn.metrics import silhouette_score score = silhouette_score(X, clusters) print(f"轮廓系数: {score:.3f}") # 典型值约0.55

3. 逻辑回归分类实战

逻辑回归是处理分类问题的经典算法,尤其适合二分类任务。我们将演示如何用3行代码构建分类器。

3.1 基础模型构建

from sklearn.linear_model import LogisticRegression logreg = LogisticRegression(max_iter=200, random_state=42) logreg.fit(X, y)

参数说明:

  • max_iter: 最大迭代次数(默认100可能不足)
  • multi_class: 自动处理多分类问题

3.2 模型评估指标

使用交叉验证评估模型性能:

from sklearn.model_selection import cross_val_score scores = cross_val_score(logreg, X, y, cv=5) print(f"平均准确率: {scores.mean():.2f} (±{scores.std():.2f})")

典型输出结果:

平均准确率: 0.97 (±0.03)

3.3 特征重要性分析

逻辑回归的系数可解释特征重要性:

import pandas as pd coef_df = pd.DataFrame(logreg.coef_, columns=iris.feature_names) print(coef_df)

4. 高级技巧与优化

4.1 K-Means优化策略

  • 肘部法则确定K值
inertia = [] for k in range(1, 6): kmeans = KMeans(n_clusters=k).fit(X) inertia.append(kmeans.inertia_) plt.plot(range(1,6), inertia, marker='o')
  • 特征缩放影响
from sklearn.preprocessing import StandardScaler X_scaled = StandardScaler().fit_transform(X) kmeans_scaled = KMeans(n_clusters=3).fit(X_scaled)

4.2 逻辑回归进阶

  • 正则化控制
# L1正则化促进稀疏性 logreg_l1 = LogisticRegression(penalty='l1', solver='liblinear')
  • 类别不平衡处理
logreg_balanced = LogisticRegression(class_weight='balanced')

5. 生产环境部署建议

将训练好的模型保存为文件:

import joblib joblib.dump(logreg, 'iris_classifier.pkl') # 加载模型 loaded_model = joblib.load('iris_classifier.pkl')

实时预测示例:

new_sample = [[5.1, 3.5, 1.4, 0.2]] print(f"预测类别: {loaded_model.predict(new_sample)[0]}") print(f"类别概率: {loaded_model.predict_proba(new_sample)}")

6. 常见问题排查

问题1:K-Means结果不稳定

  • 解决方案:增加n_init参数(默认10次随机初始化)

问题2:逻辑回归收敛警告

  • 解决方案:增大max_iter或调整tol参数

问题3:类别预测概率接近0.5

  • 检查特征工程或考虑更复杂模型

在实际项目中,这种简洁高效的实现方式能快速验证想法,而Scikit-learn的统一API设计让算法切换变得异常简单。记得根据具体问题特点调整预处理步骤和模型参数,才能获得最佳性能。