当前位置: 首页 > news >正文

Python12-聚类算法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 1. 介绍
  • 2. 聚类算法api初步使⽤
  • 3. 聚类算法实现流程
  • 4. 模型评估
  • 5. 算法优化
    • 5.1 Canopy算法配合初始聚类
    • 5.2 K-means++
    • 5.3 ⼆分k-means
    • 5.4 k-medoids(k-中⼼聚类算法)
    • 5.5 了解
  • 6. 特征降维
    • 6.1 特征选择
    • 6.2 ⽪尔逊相关系数(Pearson Correlation Coefficient)
    • 6.3 斯⽪尔曼相关系数(Rank IC)
    • 6.4 主成分分析
  • 7. 案例:探究⽤户对物品类别的喜好细分
  • 总结


前言

1. 介绍

在这里插入图片描述

在这里插入图片描述

聚类算法:
⼀种典型的⽆监督学习算法,主要⽤于将相似的样本⾃动归到⼀个类别中。
在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计算⽅法,会得到不同的聚类结
果,常⽤的相似度计算⽅法有欧式距离法。

聚类算法是⽆监督的学习算法,⽽分类算法属于监督的学习算法。

无监督学习(Unsupervised Learning)是机器学习的一种重要范式,指的是在没有标签(label)或目标值的情况下,让模型从数据中自主发现隐藏的模式、结构或规律。

2. 聚类算法api初步使⽤

sklearn.cluster.KMeans(n_clusters=8)参数:n_clusters:开始的聚类中⼼数量整型,缺省值=8,⽣成的聚类数,即产⽣的质⼼(centroids)数。
⽅法:estimator.fit(x)estimator.predict(x)estimator.fit_predict(x)计算聚类中⼼并预测每个样本属于哪个类别,相当于先调⽤fit(x),然后再调⽤predict(x)

n_clusters意思就是有几个类
因为没有目标值,所以可以直接fit_predict

import matplotlib.pyplot as plt
#生成数据
from sklearn.datasets import make_blobs
#聚类
from sklearn.cluster import KMeans
#评价分类
from sklearn.metrics import calinski_harabasz_score
#创建数据
#创建数据
X, y = make_blobs(n_samples=1000, centers=[[-1,-1],[0,0],[1, 1], [2, 2]], n_features=2,cluster_std=[0.4, 0.3, 0.2, 0.1])

n_samples表示生成的数据个数
n_features表示特征值的个数,为2的话,表示有两个特征值,那么就是二维的了,x和y轴
centers表示生成的数据的中心点
cluster_std表示中心点数据的标准差–》也就是密集程度

X:生成的样本数据,形状为 (1000, 2) 的数组
y:每个样本的真实聚类标签,取值为 0、1、2、3(对应 4 个聚类中心)

plt.scatter(X[:,0], X[:,1], marker='o')
plt.show()

在这里插入图片描述

#kmeans训练
y_pre = KMeans(n_clusters=2, random_state=0).fit_predict(X)
#可视化展示
plt.scatter(X[:,0], X[:,1],c=y_pre, marker='o')
plt.show()
#查看最后效果
print(calinski_harabasz_score(X, y_pre))

n_clusters表示分为两类
fit_predict(X)
功能:对输入数据 X 进行拟合(训练 K-Means 模型),并直接返回每个样本的聚类标签。
c=y_pre
含义:根据聚类标签 y_pre 为散点着色,同一聚类的样本会显示相同颜色,不同聚类颜色不同。
y_pre是和X一一对应的

在这里插入图片描述

三千多表示的是聚类效果,值越大越好

在这里插入图片描述

在这里插入图片描述
发现四个的时候最好

3. 聚类算法实现流程

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
案例练习
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4. 模型评估

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 算法优化

在这里插入图片描述

5.1 Canopy算法配合初始聚类

在这里插入图片描述
在这里插入图片描述

5.2 K-means++

在这里插入图片描述
在这里插入图片描述

5.3 ⼆分k-means

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.4 k-medoids(k-中⼼聚类算法)

在这里插入图片描述

5.5 了解

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6. 特征降维

降维是指在某些限定条件下,降低随机变量(特征)个数,得到⼀组“不相关”主变量的过程

在这里插入图片描述
降维的两种⽅式
特征选择
主成分分析(可以理解⼀种特征提取的⽅式)

6.1 特征选择

在这里插入图片描述

⽅法
Filter(过滤式):主要探究特征本身特点、特征与特征和⽬标值之间关联⽅差选择法:低⽅差特征过滤相关系数
Embedded (嵌⼊式):算法⾃动选择特征(特征与⽬标值之间的关联)决策树:信息熵、信息增益正则化:L1L2深度学习:卷积等

低⽅差特征过滤
删除低⽅差的⼀些特征,前⾯讲过⽅差的意义。再结合⽅差的⼤⼩来考虑这个⽅式的⻆度。
特征⽅差⼩:某个特征⼤多样本的值⽐较相近—》无关
特征⽅差⼤:某个特征很多样本的值都有差别

API
sklearn.feature_selection.VarianceThreshold(threshold = 0.0)删除所有低⽅差特征Variance.fit_transform(X)X:numpy array格式的数据[n_samples,n_features]返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有⾮零⽅差特征,即删除所有样本中具有相同值的特征。

threshold 就是那个方差临界值,小于threshold 方差的都去掉

我们对某些股票的指标特征之间进⾏⼀个筛选,除去’index,‘date’,'return’列不考虑(这些类型不匹配,也不是所需要指
标)

在这里插入图片描述

import  pandas as pd
# 特征选择
from sklearn.feature_selection import VarianceThreshold
def var_thr():#特征选择data=pd.read_csv("./data/factor_returns.csv")transfer=VarianceThreshold(threshold=1)#转化,data.iloc[:,1:10]:是所有行,110列,因为索引和后面的日期。return不要ret_data=transfer.fit_transform(data.iloc[:,1:10])print("原始数据:\n",data.iloc[:,1:10].shape)print("特征选择后的数据:\n",ret_data.shape)if __name__ == '__main__':var_thr()

在这里插入图片描述

在这里插入图片描述

发现方差小的都删除了

相关系数
主要实现⽅式:
⽪尔逊相关系数
斯⽪尔曼相关系数

6.2 ⽪尔逊相关系数(Pearson Correlation Coefficient)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
api


from scipy.stats import pearsonrx : (N,) array_likey : (N,) array_like Returns: (Pearson’s correlation coefficient, p-value)
def pea_demo():#准备数据x1 = [12.5, 15.3, 23.2, 26.4, 33.5, 34.4, 39.4, 45.2, 55.4, 60.9]x2 = [21.2, 23.9, 32.9, 34.1, 42.5, 43.2, 49.0, 52.8, 59.4, 63.5]print("皮尔逊相关系数:\n",pearsonr(x1,x2))

在这里插入图片描述

第一个值是0.99,说明相关性很高
第二个值是这样说的,当数量大于500的时候有参考意义,越接近于0,相关性就越高

6.3 斯⽪尔曼相关系数(Rank IC)

1.作⽤:
反映变量之间相关关系密切程度的统计指标
在这里插入图片描述
在这里插入图片描述

def spea_demo():# 准备数据x1 = [12.5, 15.3, 23.2, 26.4, 33.5, 34.4, 39.4, 45.2, 55.4, 60.9]x2 = [21.2, 23.9, 32.9, 34.1, 42.5, 43.2, 49.0, 52.8, 59.4, 63.5]print("斯皮尔曼相关系数:\n",spearmanr(x1,x2))

在这里插入图片描述

6.4 主成分分析

定义:⾼维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量
作⽤:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
应⽤:回归分析或者聚类分析当中
在这里插入图片描述
就是特征值的合并

sklearn.decomposition.PCA(n_components=None)将数据分解为较低维数空间n_components:⼩数:表示保留百分之多少的信息整数:减少到多少特征PCA.fit_transform(X) X:numpy array格式的数据[n_samples,n_features]返回值:转换后指定维度的array
from sklearn.decomposition import PCA
def pca_demo():# PCAdata = [[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]]#小数保留百分比,表示保留90%的信息pca = PCA(n_components=0.9)ret_data = pca.fit_transform(data)print("降维后的数据:\n",ret_data)

原始数据是 3 个样本,每个样本有 4 个特征(4 列)
当设置n_components=0.9时,PCA 计算发现只需要2 个主成分就能保留超过 90% 的原始信息
因此降维后的数据变成了 2 列(每个主成分对应一列)

在这里插入图片描述

    #表示保留三列数据pca = PCA(n_components=3)ret_data = pca.fit_transform(data)print("降维后的数据:\n",ret_data)

在这里插入图片描述

7. 案例:探究⽤户对物品类别的喜好细分

应⽤pca和K-means实现⽤户对物品类别的喜好细分划分

在这里插入图片描述
在这里插入图片描述
多个表需要合并,因为两两都有相同的字段

import pandas as pd
order_product = pd.read_csv('./source/instacart/order_products__prior.csv')
products = pd.read_csv('./source/instacart/products.csv')
orders   = pd.read_csv('./source/instacart/orders.csv')
aisles   = pd.read_csv('./source/instacart/aisles.csv')
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# 2.数据基本处理
# 2.1 合并表格
table1 = pd.merge(order_product, products, on=["product_id","product_id"])
table2 = pd.merge(table1, orders, on=["order_id","order_id"])
table = pd.merge(table2, aisles, on=["aisle_id","aisle_id"])

在这里插入图片描述

# 2.2 交叉表合并
data = pd.crosstab(table["order_id"], table["aisle"])

在这里插入图片描述

在这里插入图片描述

反正意思就是以order_id作为行索引,aisle作为列索引。求出每个order_id中每个aisle的数量

在这里插入图片描述
在这里插入图片描述

# 2.3 数据截取
new_data = data[:1000]
# 3.特征⼯程 — pca
transfer = PCA(n_components=0.9)
trans_data = transfer.fit_transform(new_data)

在这里插入图片描述

发现只有48个特征了

# 4.机器学习(k-means)
estimator = KMeans(n_clusters=5)
y_pre=estimator.fit_predict(trans_data)

在这里插入图片描述

在这里插入图片描述

接近1效果就越好,但是我们这个不好

总结

http://www.dtcms.com/a/400055.html

相关文章:

  • 卓伊凡的第一款独立游戏-unity安装运行配置以及熟悉整体unity游戏开发和unity editor【02】-优雅草卓伊凡
  • 合肥市建设厅网站手机网站开发步骤
  • Istio服务网格方案
  • wordpress 分享后可见福州短视频seo方法
  • 网站模板下载 网盘枣庄企业网站建设
  • 网站必须做ipv6自定义图片 wordpress
  • CherryStudio+cpolar:让智能工作流突破组织边界
  • count down 87 days
  • 一家专门做开网店的网站中国网评中国网评
  • C++相关概念与语法基础——C基础上的改进与优化
  • 淘宝客做网站自动更新燕莎网站建设
  • 重庆市工程造价信息价查询外包网络优化
  • 做网站后期费用备案个人网站 淘宝客
  • 电视台视频网站建设方案无锡企业网站的建设
  • 数据结构初阶——AVL树的实现(C++)
  • 【计算机通识】IoT 是什么、如何工作、关键技术、应用场景、挑战与趋势
  • php网站开发手机绑定谷歌推广外包
  • 如何面试网站开发学校网站建设与管理
  • 青岛网站建设咨询wordpress head.php
  • 企业网站管理系统网页制作模板的网站免费
  • 【Shell】Shell脚本基础知识
  • 北京seo推广清远网站推广优化公司
  • 基于STM32单片机远程浇花花盆GSM短信浇水补光设计
  • 丘里奇网站排名黑龙江省建设教育协会网站
  • 【汽车篇】AI深度学习在汽车焊缝3D视觉检测的应用
  • 上海专业高端网站建佳城建站 网站
  • RNN 与 LSTM:解密序列数据的 “记忆大师”
  • 【力扣LeetCode】 1422_分割字符串的最大得分
  • 东莞企业网站推广公司可以看任何网站的浏览器
  • SQL,使用递归 CTE 删除层级菜单项