数据规范化之KMeans详解

原创 2018年04月17日 20:03:49
这是python数据分析与挖掘实战的 课本代码
但是里面有些可能是版本问题或者作者笔误问题导致代码结果运行不出。所以笔者自行根据做了修改,而且有的知识也做了详述

# -*- coding: utf-8 -*-
"""
Created on Tue Apr 10 16:15:14 2018
@author: Hatutor
"""
#数据规范化
import pandas as pd
from pandas import Series, DataFrame
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
datafile = r'F:\数据分析实战\chapter4\demo\data\discretization_data.xls'
data = pd.read_excel(datafile)
#data = data[0:20]#这个只是在调试的时候加上的
data = data[u'肝气郁结证型系数'].copy()
k = 4
d1 = pd.cut(data, k, labels = range(k))#等宽离散化。
#详情可以查看pd.cut??是描述每一个x是属于哪个区间的。
#这个时候是把这些点归在1234四个区间之中
#等频离散化
w = [1.0*i/k for i in range(k+1)]
w = data.describe(percentiles = w)[4:4+k+1]
#详情可查询pd.cut??以及自己尝试describe(percentiles=..)
#percentile=w,w就是四分位点,也就是各占了25%的意思。后面的[4:9]其实就是describe
#就是describe描述统计的后面4的[4:9]项。w其实就是取了一个四分位的数值。0-25%。
#25%-50% 50%-75% 75%-100%
w[0] = w[0] *(1-1e-10)#1-1e-10=0.999999我觉着就是1.没啥区别
d2 =  pd.cut(data, w, labels=range(k))

from sklearn.cluster import KMeans#引入KMeans算法(聚类算法的一种)
#sklearn是机器学习库之一
kmodel = KMeans(n_clusters=k, n_jobs = 4)
#详情咨询KMean??Ipython.详细解读下解读下。
#n_cluster就是聚类的数量。
#建立模型,n_jobs是并行数,一般等于cpu数较好。
#并行数据输出是输出数据的一定数位
kmodel.fit(data.values.reshape(len(data), 1))
#fit函数是训练模型,也就是开始聚合
c = pd.DataFrame(kmodel.cluster_centers_).sort_values(0)
#改版之后,没有sort()这个函数了。所以用的是sort_index.是按行排序
#cluster_centers.表示的输出聚合中心,后面的sort是排序的意思,默认是随机排序的
w = pd.DataFrame.rolling(c, window=2,center=False).mean().iloc[1:]
#rolling_mean()是移动窗口的意思,求出相邻两项的平平均数。
w = [0] + list(w[0]) + [data.max()]#把首末边界点加上。
d3 = pd.cut(data, w, labels = range(k))
#加了首末点之后就是0+四个聚类点,就是五个点,要是不加就是四个点,四个点标签就会报错。
#w在这个时候就会显示出四个聚类点了。
def cluster_plot(d, k):#自定义作图函数来显示聚类结果
    plt.figure(figsize = (8, 3))#图像的大小。
    for j in range(0, k):#0-4
        plt.plot(data[d==j], [j for i in d[d==j]], '.')
#plot的横纵坐标这个是值得注意的,data[d==j],这里是个循环,cut(label.)重新定义了。
#把数据分成了1,2,3,4个区间,纵坐标代表的1234这数字。横坐标是归在1或者2(3 or 4)
#之中的具体的数值。可以在Ipython之中进行这样的演算如d==j是归在j类的,data[d==j]
#代表的就是具体的数值。后面的是d[d==j].这样前面有多少个点后面就有多少个与之相应的点
       
    plt.ylim(-0.5, k-0.5)#这里指的是y轴的范围。
    return plt

cluster_plot(d1, k).show()
cluster_plot(d2, k).show()
cluster_plot(d3, k).show()

转载请标注出处:https://blog.csdn.net/Hatutor/article/details/79979886

版权声明: https://blog.csdn.net/Hatutor/article/details/79979886

K-均值算法

  • 2014年12月21日 13:31
  • 324KB
  • 下载

数据规范化

通过将属性值按比例缩放,使之落入一个小的特定区间,如0.0~1.0,对属性规范化。对于涉及神经网络或距离度量的分类算法(如最近邻分类)和聚类,规范化特别有用。如果使用神经网络后向传播算法进行分类挖掘(...
  • baikaishui525
  • baikaishui525
  • 2011-08-25 14:30:05
  • 4559

matlab中kmeans简单使用

[Idx,C,sumD,D]=Kmeans(data,3,’dist’,’sqEuclidean’,’rep’,4) 等号右边: kmeans:K-均值聚类  d...
  • SZU_Hadooper
  • SZU_Hadooper
  • 2017-01-09 15:53:53
  • 301

NBA控卫聚类——K-Means详解

Dataset 在NBA的媒体报道,体育记者通常会集中在少数几个球员身边。为什么这个球员与其他球员不一样?使用数据挖掘可以探索这个问题。本文的数据集nba_2013.csv是2013-2014赛季...
  • zm714981790
  • zm714981790
  • 2016-04-26 11:14:16
  • 2303

Spark 中LocalKmeans算法详解

一、Kmeans算法思想 Kmeans算法的具体思想这里省略。 Kmeans算法实现步骤一般如下: 1、从D中随机取k个元素,作为k个簇的各自的中心,或者随机生成k个中心元素。 2、分别计算剩...
  • L668303
  • L668303
  • 2015-11-06 10:14:55
  • 678

Spark MLlib Kmeans源代码解读(上)

Spark MLlib 源代码解读之Kmeans(上)PS:第一次写博客,希望大家支持,谢谢。基本原理:Kmeans算法的基本思想是:初始随机给定k个簇中心,按照最近邻的点将数据集中所包含的点分给不同...
  • stevekangpei
  • stevekangpei
  • 2017-06-17 15:30:28
  • 1611

Kmeans原理公式图文详解

在网上查看了些博客,感觉大家都对数学公式的解释的比较晦涩,下面我结合一个非常简单的示意图解释下他的数学公式,理解不到位的请留言。 kmeans是一种聚类算法下面是算法的描述 给定训练样本是每一个 ,即...
  • u010946556
  • u010946556
  • 2016-03-23 16:27:17
  • 3602

k-means算法详解

k-means算法详解 主要内容 k-means算法简介 k-means算法详解 k-means算法优缺点分析 1、k-means算法简介   k-means算法是一种聚类算法,所谓聚类,即根据相...
  • zhihua_oba
  • zhihua_oba
  • 2017-06-28 11:04:39
  • 1348

数据规范化常用方法

数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。这样去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。其中最典型的就是0...
  • duval_yang
  • duval_yang
  • 2015-05-19 08:46:54
  • 370

Kmeans算法详解及实现

今天我们介绍数据挖掘领域最基本的一个算法,Kmeans算法,并进行算法的讲解及实现。本文实现代码为最基础的实现方式,如果数据多维,例如用经典iris数据集时,可能会需要做数据预处理,比如归一化,并且修...
  • u012229612
  • u012229612
  • 2014-09-30 15:40:30
  • 1711
收藏助手
不良信息举报
您举报文章:数据规范化之KMeans详解
举报原因:
原因补充:

(最多只允许输入30个字)