从分类到聚类:机器学习全流程实战解析

本文通过多个典型案例,系统讲解机器学习中的分类与聚类技术实现,涵盖数据预处理、模型训练、评估优化等关键环节,并附可复现的Python代码。

一、分类任务实战

1.1 数据准备与划分

# 正确加载方式
from sklearn.model_selection import train_test_split
import pandas as pd

data = pd.read_csv("1.csv")
X = data.iloc[:, :-1]
y = data.iloc[:, -1]

# 规范变量命名
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42)

1.2 核心分类算法实现

K近邻算法(KNN)
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score

# 修正后的KNN实现
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# 交叉验证正确用法
cv_scores = cross_val_score(knn, X_train, y_train, cv=5)
print(f"KNN交叉验证准确率:{cv_scores.mean():.2f} (±{cv_scores.std():.2f})")
朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB

# 修正贝叶斯实现
nb_clf = GaussianNB()
nb_clf.fit(X_train, y_train)

# 验证集评估
test_acc = nb_clf.score(X_test, y_test)
print(f"贝叶斯测试准确率:{test_acc:.2%}")

1.3 模型评估要点

  • 混淆矩阵可视化
  • 分类报告输出
  • 交叉验证策略选择
  • 多模型对比分析

二、聚类实例解析(K-Means迭代过程)

2.1 初始条件

  • 样本集S坐标:
    O1(0,2)  O2(0,0)  O3(1.5,0)  O4(5,0)  O5(5,2)
  • 初始簇中心:
    M1 = (0,2)  # O1坐标
    M2 = (0,0)  # O2坐标

2.2 样本分配计算(以O3为例)

<过程详解>

  1. ​计算欧氏距离​​:

    d(M1,O3)d(M2,O3)​=(0−1.5)2+(2−0)2​=2.25+4​=2.5=(0−1.5)2+(0−0)2​=2.25​=1.5​
  2. ​距离比较​​:

    1.5 (M2) < 2.5 (M1) ⇒ O3 ∈ C2
  3. ​分配结果​​:

    C1 = {O1} 
    C2 = {O2, O3}

2.3 簇中心更新

        M1′=(20+5​,22+2​)=(2.5,2)M2′=(30+1.5+5​,30+0+0​)=(2.17,0)

2.4 二次迭代分配

样本点到M1'(2.5,2)距离到M2'(2.17,0)距离归属簇
O1(0,2)√(2.5²+0²)=2.5√(2.17²+2²)=3.02C1
O5(5,2)√(2.5²+0²)=2.5√(2.83²+2²)=3.47C1
O2(0,0)√(2.5²+2²)=3.2√(2.17²+0²)=2.17C2
O4(5,0)√(2.5²+2²)=3.2√(2.83²+0²)=2.83C2

最终聚类结果:

C1 = {O1, O5} 中心(2.5,2)
C2 = {O2, O3, O4} 中心(2.17,0)

2.5 误差计算验证

SSE1​SSE2​Total SSE​=(0−2.5)2+(5−2.5)2=12.5=(0−2.17)2+(1.5−2.17)2+(5−2.17)2=13.15=12.5+13.15=25.65(较初始52.25下降51​)

三、机器学习最佳实践


3.1 模型选择建议

算法类型适用场景时间复杂度数据要求
KNN小规模数据O(n)需要归一化
朴素贝叶斯文本分类O(n)特征独立
K-Means客户分群O(nkt)球形分布

3.2 性能优化策略

  • 特征工程:增加名字性别特征、文本关键词特征
  • 参数调优:GridSearchCV自动搜索
  • 集成方法:VotingClassifier组合模型

四、最佳实践建议

  1. ​分类任务优化​​:使用GridSearchCV自动选择KNN最优

    from sklearn.model_selection import GridSearchCV
    param_grid = {'n_neighbors': range(1, 15)}
    grid = GridSearchCV(KNeighborsClassifier(), param_grid, cv=5)
    grid.fit(X_train, y_train)

  2. ​聚类改进方案​​:采用K-Means++初始化避免局部最优

    from sklearn.cluster import KMeans
    kmeans = KMeans(n_clusters=2, init='k-means++', n_init=10)

  3. ​可视化验证​​:

    import matplotlib.pyplot as plt
    plt.scatter(X[:,0], X[:,1], c=clusters)
    plt.scatter(centers[:,0], centers[:,1], marker='X', s=200)
    plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值