9.24学习笔记(异常分析)

基本思想:聚类分析思想

将数据集中的数据看作多维空间中的点(特征向量)
孤立点是数据集中与大多数数据的距离都超过某个阈值的那些数据
优点:在不值得数据分布的情况下也能进行孤立点分析
缺点:阈值很难选取,并且当数据集和维度较大时,计算量较大
划分方法:给定n个样本的数据集以及要生成的簇的数目k,划分方法将样本组织为k个划分(k<=n),每个划分代表一个簇
划分准则:同一个簇中的样本尽可能接近或相似,不同簇中的样本尽可能远离或不相似

典型划分方法:
k-means(k-均值):由簇中样本的平均值来代表整个簇
k-medoids(k-中心点):由处于簇中心区域的某个样本来代表整个簇

def __init__(self,n_clusters=8,init='k-means++',n_init=10,max_iter=300,tol=1e-4,precompute_distnnces='auto',verbose=0,random_state=None,copy_x=True,n_jobs=1):

输入参数:
n_clusters
要分成的簇数也是要生成的质心数
类型:整数型(int)
默认值:8

init
初始化质心
类型:可以是function可以是array(random or ndarray)
默认值:采用k-means++(一种生成初始质心的算法)

n_init
设置选择质心种子次数,默认为10次。返回质心最好的一次结果(好是指计算时长短)
目的:每一次算法运行时开始的centroid seeds是随机生成的,这样得到的结果也可能有好有坏,所以要运行n_init次,取其中最好的

max_iter
每次迭代的最大次数
类型:整形(int)
默认值:300

tol
容忍的最小误差,当误差小于tol就会退出迭代(算法中会依赖数据本身)
类型:浮点型(float)
默认值:1e-4(0.0001)

n_jobs
使用进程的数量,与cpu个数有关
类型:整数型(int)
默认值:1

输出参数:
label_:每个样本对应的簇类别标签
示例:r1=pd.Series(model.labels_).value_counts() #统计各个类别的数目

cluster_centers_:聚类中心
返回值:array,[n_clusters,n_features]
示例:r2=pd.DataFrame(model.cluster_centers_) #找出聚类中心

K-Means示例

#使用K-Means算法聚类
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
#参数初始化
inputfile='kmeans.data'         #销量及其他属性数据
outputfile='kmoutput.xls'       #保存结果的文件名
k=3                             #聚类的类别
iteration=500                   #聚类最大循环次数
dataset=np.loadtxt(fname='kmeans.data',delimiter=',')
data=pd.read_csv(inputfile,header=None)
data_zs=1.0*(data-data.mean())/data.std()       #数据标准化
model=KMeans(n_clusters=k,n_jobs=4,max_iter=iteration)  #分为4类,并发数4
model.fit(data_zs)      #开始聚类
#简单打印结果
r1=pd.Series(model.labels_).value_counts()   #统计各个类别的数目
r2=pd.DataFrame(model.cluster_centers_)     #找出聚类中心
r=pd.concat([r2,r1],axis=1)                 #横向连接(0是纵向,得到聚类中心对应的类别下的数目
r.columns=list(data.columns)+[u'类别数目']  #重命名表头
print(r)
#详细输出原始数据及其类别
r=pd.concat([data,pd.Series(model.labels_,index=data.index)],axis=1)
#详细输出每个样本对应的类别
r.columns=list(data.columns)+[u'聚类类别']   #重命名表头
r.to_excel(outputfile)                      #保存结果

#聚类分析结果可视化
from sklearn.manifold import TSNE
tsne=TSNE()
tsne.fit_transform(data_zs)                 #进行数据降维
tsne=pd.DataFrame(tsne.embedding_,index=data_zs.index)#转换数据格式
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']     #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False        #用来正常显示负号
#不同类别用不同颜色和样式绘图
d=tsne[r[u'聚类类别']==0]
plt.plot(d[0],d[1],'r.')
d=tsne[r[u'聚类类别']==1]
plt.plot(d[0],d[1],'go')
d=tsne[r[u'聚类类别']==2]
plt.plot(d[0],d[1],'b*')
plt.show()

结果:
0 1 2 3 … 6 7 8 类别数目
0 0.980221 0.272167 0.341372 -0.497458 … -0.047186 1.038799 0.384136 223
1 -0.215547 0.885108 0.323910 0.909813 … 0.531096 -0.007197 0.824300 160
2 -0.478186 -0.525482 -0.332342 -0.089966 … -0.193384 -0.598703 -0.565065 385

[3 rows x 10 columns]
在这里插入图片描述
电脑可能不支持多线程,n_jobs设置除1之外全部报错

聚类分析结果的降维可视化-TSNE,将输入的高维特征数在2维或3维的空间中展示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值