Python机器学习算法实践——二分k-均值算法

二分k-均值算法步骤:

首先将所有点作为一个属,然后将该簇-分为二,之 后选择其中-个簇进续进行划分,选择哪一个簇进行划取决于对其划分是否可以最大程度降低SSE的值,上述基于SSE的别分过程不断重复,直到得到用户指定的属数目为止,
将所有点看成一个簇
当簇数目小于k时
      对于每一个簇:
          计算总误差
           在给定的簇上面进行K-均值聚类(k=2)计算将该簇一分为二后的总误差
      选择使得误差最小的那个簇进行划分操作
另一种做法选择S正最大的簇进行划分,直到簇数目达到用户指定的数目为止。

 

Python实现

# -*- coding: utf-8 -*-
"""
Created on Thu Aug 16 11:09:04 2018

@author: wjw
"""

from numpy import  *

def loadDataSet(fileName):
    dataMat=[]
    fr=open(fileName)
    for line in fr.readlines():
        arr=line.strip().split('\t')
        #map (回调函数,列表)-》循环列表中的每个值,调用回归函数得到结果,存到map -》 list
        l=list(map(float,arr))#float 强制类型转换
        dataMat.append(l)
    return dataMat
    
dataMat=loadDataSet('dataset/testSet.txt')
#print(dataMat[0:5])
    
#距离 度量方式:
#1.欧氏距离
def disEuclid(vecA,vecB):
    return sqrt(sum(power((vecA-vecB),2)))

#初始质心选取
def randCenter(dataSet,k):
    n=shape(dataSet)[1]#n=..列
    centers=mat(zeros((k,n)))
    #print(centers)
    for j in range(n): #每循环一次,产生的一个特征值
        #当前第j列的最小值,与最大值,求范围
        minJ=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WJWFighting

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值