聚类算法:根据样本之间的相似性,将样本划分到不同的类别中,不同的相似度计算方法,会得到不同的聚类效果

Kmeans聚类:在没有先验知识的情况下,自动发现数据集的内在结构和模式

无监督学习(有特征,无标签)  常用:欧式距离

API使用:

#必须放置第一个位置上!!!!
import  os
os.environ['OMP_NUM_THREADS']='4'
from sklearn.datasets import make_blobs # 数据集的生成
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans  # k_means的api实现

# 数据的生成
# 参1:样本数量  参2:样本特征数量(2列)  参3: 质心点  参4:标准差  参5:随机种子
x,y=make_blobs(n_samples=1000, n_features=2, centers=[[-1, -1], [0, 0], [1, 1], [2, 2]],
                  cluster_std=[0.4, 0.2, 0.3, 0.4], random_state=23)
# print(x) # 生成的坐标轴
# print(y) # 归属的分类

# 图像的生成
plt.scatter(x[:,0],x[:,1])
plt.show()

# 调用模型
#参1:聚类数量,簇的个数  参2:随机种子
model = KMeans(n_clusters=4, random_state=23)
# 训练并预测
y_pred=model.fit_predict(x)
plt.scatter(x[:,0],x[:,1],c=y_pred)
plt.show()

n_samples 生成的样本数, n_features 特征数, centers=[[-1, -1], [0, 0], [1, 1], [2, 2]], 每个簇的中心坐标cluster_std=[0.4, 0.2, 0.3, 0.4] 每个簇的离散程度

Kmeans算法的实现流程

1.确定要分多少个簇

2,随机算则k个样本作为初始的聚类中心

3,计算每个样本到k的中心距离,选择最近的聚类中心点当作标记类别

4,根据每个类别的样本点,重写计算出新的聚类中心点(平均值)如果计算的新的样本点与之前的一样,就停止聚类,如果不同就重复第三步直到聚类中心不变

评估指标: 误差平方和和sse

sse越小,表示数据点越接近他们的中心点,聚类的效果越好

sse:每个点的x,y减去质心点的平方和

API

肘方法:K值的确定,确定这些数据的最佳簇的个数,随着k值的增加,sse值会逐渐减小直到为0,当k增加,sse的减小幅度变小了,那么这个拐点就是最佳的k值点

import os
os.environ['OMP_NUM_THREADS']='4'

from sklearn.datasets import make_blobs # 数据集的生成
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans  # k_means的api实现

# 数据的生成

x,y=make_blobs(n_samples=1000,n_features=2,centers=[[-1, -1], [0, 0], [1, 1], [2, 2]],
               cluster_std=[0.4, 0.2, 0.2, 0.2],random_state=22)

# 创建存簇的列表
see_list=[]

#循环计算不同聚类树的sse
for clu_num in range(1,100):
    # 模型的创建
    # 参数 形成多少个簇   参数 随机种子  参数 算法的最大迭代次数
    kmeans_model = KMeans(n_clusters=clu_num, random_state=22,max_iter=100)
    # 模型的训练
    kmeans_model.fit(x)
    # 将模型的sse属性写入到列表中
    see_list.append(kmeans_model.inertia_)

# 图像的生成
plt.figure(figsize=(18,8),dpi=100)
# x轴的刻度值
plt.xticks(range(0,100,3),labels=range(0,100,3))
# 显示网格
plt.grid()
# 标题
plt.title('sse')
# 绘制折线图,参数  x轴    参数 y轴为see_list的数据 参数  为绘制的样式
plt.plot(range(1,100),see_list,'or-')
plt.show()


SC轮廓系数法:簇内的内聚距离,簇间的分离程度,a:簇内的距离越小越好,b:簇间的距离越大越好

s=(b-a)/max(a,b)

a:样本到簇内其他点的平均距离,b:样本到其他簇间的平均值的最小值

API:

import os
os.environ['OMP_NUM_THREADS']='4'
from sklearn.datasets import make_blobs # 数据集的生成
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans  # k_means的api实现
from sklearn.metrics import silhouette_score

# 数据的生成

x,y=make_blobs(n_samples=1000,n_features=2,centers=[[-1, -1], [0, 0], [1, 1], [2, 2]],
               cluster_std=[0.4, 0.2, 0.2, 0.2],random_state=22)

# 创建存簇的列表
sc_list=[]

#循环计算不同聚类树的sse
for clu_num in range(2,100):
    # 模型的创建
    # 参数 形成多少个簇   参数 随机种子  参数 算法的最大迭代次数
    kmeans_model = KMeans(n_clusters=clu_num, random_state=22,max_iter=100)
    # 模型的训练
    kmeans_model.fit(x)
    # 模型的预测
    y_pre=kmeans_model.predict(x)
    # 计算模型的sc值并将其存入到列表中
    sc_list.append(silhouette_score(x,y_pre))

# 图像的生成
plt.figure(figsize=(18,8),dpi=100)
# x轴的刻度值
plt.xticks(range(0,100,3))
# 添加x,y轴的标签
plt.xlabel('k')
plt.ylabel('sc_value')
# 显示网格
plt.grid()
# 标题
plt.title('sc')
# 绘制折线图,参数  x轴    参数 y轴为see_list的数据 参数  为绘制的样式
plt.plot(range(2,100),sc_list,'ob-')
plt.show()



CH轮廓系数法:考虑簇内的内聚程度,簇间的离散程度和质心个数

ssw:类别内部数据的距离平方和(簇内紧凑性)越小越好(数据在簇内越集中)

ssb:类别之间的距离平方和(簇见离散程度)越大越好(簇与簇之间越分散)

ch=ssb/ssw*m-k/k-1

m:总样本数量

k:质心的个数

ch系数越大,说明聚类效果越好

API:

from sklearn.datasets import make_blobs # 数据集的生成
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans  # k_means的api实现
from sklearn.metrics import calinski_harabasz_score

# 数据的生成

x,y=make_blobs(n_samples=1000,n_features=2,centers=[[-1, -1], [0, 0], [1, 1], [2, 2]],
               cluster_std=[0.4, 0.2, 0.2, 0.2],random_state=22)

# 创建存簇的列表
ch_list=[]

#循环计算不同聚类树的sse
for clu_num in range(2,100):
    # 模型的创建
    # 参数 形成多少个簇   参数 随机种子  参数 算法的最大迭代次数
    kmeans_model = KMeans(n_clusters=clu_num, random_state=22,max_iter=100)
    # 模型的训练
    kmeans_model.fit(x)
    # 模型的预测
    y_pre=kmeans_model.predict(x)
    # 计算模型的sc值并将其存入到列表中
    ch_list.append(calinski_harabasz_score(x,y_pre))

# 图像的生成
plt.figure(figsize=(18,8),dpi=100)
# x轴的刻度值
plt.xticks(range(0,100,3),labels=range(0,100,3))
# 显示网格
plt.grid()
# 标题
plt.title('sc')
# 绘制折线图,参数  x轴    参数 y轴为see_list的数据 参数  为绘制的样式
plt.plot(range(2,100),ch_list,'oy-')
plt.show()



总结机器学习:

knn算法:(分类和回归问题)

思想:近朱者赤近墨者黑

核心:欧式距离    曼哈顿距离  切比雪夫距离  闵式距离

方案:分类:多数表决   回归: 算平均值

线性回归:(回归问题)

一元线性回归:y=wx+b

多元线性回归: y=W转置x+b

评估方案:

1.最小二乘

2.MAE 平均绝对误差 /MSE 均方误差/RMSE 均方根误差

回归损失最小:

1.正规方程

2,梯度下降:w新=w旧-学习率*梯度

逻辑回归:(分类问题)

思想:把线性回归的输出作为激活函数的输入,设置阈值完成分类

核心:激活函数 sigmoid   1/1+e的-x次方  二分类

目的:增加模型的非线性因素

评估:

1.混淆矩阵

2.准确率

3.精确率

4.召回率

5.f1-score

6.ROC曲线

7.AUC值

决策树:(分类和评估问题)

1.构建决策树的方法

ID3数:分类问题   信息增益

C4.5数: 分类问题  信息增益率

cart数:分类和回归问题

分类:基尼指数

回归:平方误差

2.决策树的剪枝

预剪枝和后剪枝

集成学习(思想):(分类和回归问题)

思想:bagging(并行)  boosting(串行)

并行:随机森林(分类和回归)默认为cart树

串行:

adaboost:自适应提升  分类问题  核心:调整样本权重

GBDT:梯度提升决策树  分类和回归  核心:残差、

XGBoost:极限梯度提升树  分类和回归  核心:加入了正则化

聚类算法:无监督学习算法

1.Kmeans算法的实现流程

2.肘部法寻找最优k值

3.聚类的评估

SSE: 簇内

SC: 簇内和簇间

CH:簇内和簇间和质心的个数

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐