猫史档案馆


用算法分析赛位排名

用户:炼金树枝炼金树枝查看:4 回复:7 评论:4 创建时间:2020-01-12T21:43:54


这几天我了解到分类算法,是K-均值算法。我就想到了刚结束的S4赛季,我就用K-均值算法来分析S4赛季前十名的排名。

我就简单说一下K-均值算法。

K-均值算法是聚类算法的一种。

聚类就是,当给定一组数据时将类似的数据分组。

在聚类中,每一个组称为“聚集”

相似性根据算法而变化,取决于数据点之间的距离、坐标等。

K-均值算法是通过距每个聚集群中心点的距离来分类数据。

K-均值算法具有聚类结果跟据随机设置的第一个中心点的位置而不同的特征。

我用K-均值算法计算了S4赛季前十名的分类。

分组如下:

254.5:秋葵 鄂州 
148.33:炼金树枝 柯铖 桂林米粉甲天下 
133.2:全民编神 33工作awa 即笔_成书 lixinge 小小fan

 


回复

上一页1 页 / 共 1下一页
炼金树枝炼金树枝

源码如下:

#排行
#“,”换行
ph = {"秋葵":271,
"鄂州":238,
"炼金树枝":152,
"柯铖":150,
"桂林米粉甲天下":143,
"全民编神":134,
"33工作awa":134,
"即笔_成书":133,
"lixinge":133,
"小小fan":132}
#距离
jl = {}
#归类
gl = {}
#中间点
zjd = [250, 150, 130]
while True:
for i in ph:
#初始化为非常大
jl.update({i: 9998})
for j in range(len(zjd)):
jl0 = abs(ph.get(i)-zjd[j])
if jl0 < jl.get(i):
#如果当前距离小于之前的距离,更换距离
jl.update({i: jl0})
gl.update({i: zjd[j]})
#是否有变更
b=False
#计算新的中间点
for j in range(len(zjd)):
#累加和
s = 0
#计数
c = 0
for i in gl:
if gl.get(i) == zjd[j]:
s += ph.get(i)
c += 1
if c!=0:
#不为零
s=round(s/c,2)
if abs(zjd[j]-s) > 0.01:
#如果新中心点s与原来的
zjd[j] = s
b = True

if b == False:
#没有变更,退出循环
break

td=0
for i in gl:
if td!=gl.get(i):
print()
print(str(gl.get(i)) + ":", end="")
td=gl.get(i)
print(i, end=" ")

点赞0


评论


柯子涵0711柯子涵0711

这有什么意义呢?

点赞1


评论


编程猫王丫丫编程猫王丫丫

emotion_编程猫_点赞

点赞0


评论


星影繁光星影繁光

厉害

点赞0


评论


疯四MOYO疯四MOYO

优秀

点赞0


评论


我很胖胖啊~我很胖胖啊~

厉害了

点赞0


评论


炼金树枝炼金树枝

之前是我第一次发代码的贴,没有格式化,今天代码格式好来再发一下S5赛季的分析。

#排行
#“,”换行
ph = {"秋葵":969,
"Defined":968,
"炼金树枝":619,
"旋风2005":250, 
"欠王迷":244,
"33工作小号":236,
"屋下宇宙":182,
"ColdMao":154,
"吧唧咕 吃货":148,
"热情的麦霸菇71...":142}
#距离
jl = {}
#归类
gl = {}
#中间点
zjd = [250, 150, 130]
while True:
    for i in ph:
        #初始化为非常大
        jl.update({i: 9998})
        for j in range(len(zjd)):
            jl0 = abs(ph.get(i)-zjd[j])
            if jl0 < jl.get(i):
                #如果当前距离小于之前的距离,更换距离
                jl.update({i: jl0})
                gl.update({i: zjd[j]})
    #是否有变更
    b=False
    #计算新的中间点
    for j in range(len(zjd)):
        #累加和
        s = 0
        #计数
        c = 0
        for i in gl:
            if gl.get(i) == zjd[j]:
                s += ph.get(i)
                c += 1
        if c!=0:
            #不为零
            s=round(s/c,2)
            if abs(zjd[j]-s) > 0.01:
                #如果新中心点s与原来的
                zjd[j] = s
                b = True

    if b == False:
        #没有变更,退出循环
        break

td=0
for i in gl:
    if td!=gl.get(i):
        print()
        print(str(gl.get(i)) + ":", end="")
        td=gl.get(i)
    print(i, end=" ")

运行结果:
852.0:秋葵 Defined 炼金树枝
243.33:旋风2005 欠王迷 33工作小号
156.5:屋下宇宙 ColdMao 吧唧咕 吃货 热情的麦霸菇71... 

与秋葵 Defined差那么多分,还可以进入第一组,暗喜!

点赞0


评论