k-means算法(数据挖掘与分析)------解决聚类的中心问题

k-means算法(数据挖掘与分析)------解决聚类的中心问题

参考博客

https://blog.csdn.net/u013611461/article/details/53635835
参考的思想:在这里插入图片描述

问题来源

实验五(这次我要解决的问题)
将8个点聚类为3个簇:A1(2.10),A2(2,5),A3(8,4),B1(5,8),B2(7,5),B3(6,4),C1(1,2),C3(4,9)距离函数是欧几里得距离(然而我并没有使用这个不知道是什么的东西)。假设初始选择A1,B1,C1分别为每个聚类的中心,用k-means算法给出:

  1. 在第一次循环执行后的三个聚类中心
  2. 最后的三个簇

在这里插入图片描述
两个定义的函数没有截图,但有代码,在下面。
第三行的print()没有截图截完全
第三行的print()没有截图截完全,在代码里面有

代码如下

import operator
import copy

#定义函数求簇所有点的均值,并将均值作为质心
def avg_(alist,blist):#alist为簇的点,blist用ott_avg替换
    n=len(alist)
    x=0.0
    y=0.0
    for i in range(n):
        x = x + alist[i][0] / float(n)
        y = y + alist[i][1] / float(n)
    blist[0]=x
    blist[1]=y

#定义函数计算质心于数据点之间的距离
def Rx(alist,otg_avg,one,two,three):#将alist换成ott_avg
    print("每个点的坐标与质心的距离的平方:----------------------------")
    for i in range(8):
        R1 = (alist[i][0] - otg_avg[0][0]) ** 2 + (alist[i][1] - otg_avg[0][1]) ** 2
        R2 = (alist[i][0] - otg_avg[1][0]) ** 2 + (alist[i][1] - otg_avg[1][1]) ** 2
        R3 = (alist[i][0] - otg_avg[2][0]) ** 2 + (alist[i][1] - otg_avg[2][1]) ** 2
        blist = [R1, R2, R3]  # 将质心于数据点之间的距离保存在blist中
        print(alist[i], end=" ")
        print(blist)
        # 将最小的保存于one,two,three列表中
        a = blist.index(min(blist))
        if a == 0:
            one.append(alist[i])  # 向one中添加坐标
        elif a == 1:
            two.append(alist[i])  # 向two中添加坐标
        elif a == 2:
            three.append(alist[i])  # 向three中添加坐标
    print('one:', one, 'two:', two, 'three:', three)

adict={'A1':[2,10],'A2':[2,5],'A3':[8,4],'B1':[5,8],'B2':[7,5],'B3':[6,4],'C1':[1,2],'C3':[4,9]} # 后期index使用
alist=[[2,10],[5,8],[1,2],[2,5],[8,4],[7,5],[6,4],[4,9]] # 将8个坐标点以二维列表的形式保存
#创建3个列表保存簇
one=[]
two=[]
three=[]
#创建默认列表保存各个簇的质心
ott_avg=[[2,10],[5,8],[1,2]]
ott_avg_one=ott_avg[0]      #为了便于avg_()函数调用,故进行了引用
ott_avg_two=ott_avg[1]
ott_avg_three=ott_avg[2]

#创建1个列表保存各个簇的质心(临时存储)
ott_avg_a=[[0,0],[0,0],[0,0]]

i=1
while operator.eq(ott_avg,ott_avg_a)==0:
    print('第{}次循环:------------------------------------------------'.format(i))
    ott_avg_a=copy.deepcopy(ott_avg) # (临时存储)
    # 对每个质心,计算质心于数据点之间的距离(R1,R2,R3),
    # 将数据点分配到距其最近的簇(one,two,three)
    Rx(alist,ott_avg,one,two,three)
    #对于每个簇,计算簇中所有点的均值并将均值作为质心
    avg_(one, ott_avg_one)
    avg_(two, ott_avg_two)
    avg_(three, ott_avg_three)
    print('质心---------{}----------:{}'.format(i,ott_avg))
    #清空one,two,three列表
    one.clear()
    two.clear()
    three.clear()

    i+=1

结果截图

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

课后习题

实验三(或者写书上例子5-6)
根据以下数据集使用Apriori算法找出频繁项集,给商家推荐营销策略,最小支持度和置信度请自己给定。
购物篮1 牛奶 , 洋葱 , 玉米 , 芸豆 , 鸡蛋 , 酸奶
购物篮2 菠萝 , 洋葱 , 玉米 , 芸豆 , 鸡蛋 , 酸奶 ,
购物篮3 牛奶 , 苹果 , 芸豆 , 鸡蛋 ,
购物篮4 牛奶 , 牛肉 , 玉米 , 芸豆 , 酸奶 ,
购物篮5 玉米 , 洋葱 , 洋葱 , 芸豆 , 冰淇淋 , 鸡蛋

实验四
从国家统计局下载小数据做一个简单的ARMA或ARIMA时间序列预测

实验五
将8个点聚类为3个簇:A1(2.10),A2(2,5),A3(8,4),B1(5,8),B2(7,5),B3(6,4),C1(1,2),C3(4,9)距离函数是欧几里得距离。假设初始选择A1,B1,C1分别为每个聚类的中心,用k-means算法给出:

  1. 在第一次循环执行后的三个聚类中心
  2. 最后的三个簇

,
实验六
使用贝叶斯算法实现以下问题:
假设有一家小公司招收机器学习工程师,为了在更广泛的范围内筛选人才,他们写一些爬虫,去各个招聘平台、职场社交平台爬取简历,然后又写了一个简单的分类器筛选他们感兴趣的候选人。这个筛选分类器是朴素贝叶斯分类器,训练数据是现在公司里的机器学习工程师和之前来面试过这一职位,有被录取的人员的简历记录。全部数据集如下,请预测一位985硕士技能会C++的应聘者是否能录取?
编号 毕业学校是否985 学历 技能 是否被录取
在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值