Scikit-learn 1.5实战:3行代码完成K-Means聚类与逻辑回归分类
📅 2026/7/9 1:56:44
👁️ 阅读次数
📝 编程学习
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.553. 逻辑回归分类实战
逻辑回归是处理分类问题的经典算法,尤其适合二分类任务。我们将演示如何用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设计让算法切换变得异常简单。记得根据具体问题特点调整预处理步骤和模型参数,才能获得最佳性能。
编程学习
技术分享
实战经验