重生归来,我要成功 Python 高手--day35 聚类算法
聚类算法:根据样本之间的相似性,将样本划分到不同的类别中,不同的相似度计算方法,会得到不同的聚类效果
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:簇内和簇间和质心的个数
更多推荐


所有评论(0)