python实现FSC

该篇与聚类小练习2对应,是它的python实现方法
程序
import numpy as np
fi=open("D:\\alsun\data.txt")
lin=fi.readlines()
fi.close()
data=np.ones([100,200])
for i,lines in enumerate(lin):
    data[i][:]=lines.split("\t")
data1=zip(*data)
data2=list(data1)
data3=np.array(data2)
z=np.zeros([2,100])
z[0][:]=data3[0][:]
z[1][:]=data3[1][:]
w=np.ones([2,100])/100
err=1
alp=2
lmd=0.5
dd=np.ones(2)
E=0
#print(np.shape(data),np.shape(z))
while err>0.05:
    u = np.zeros([2, 200])
    for i in range(200):
        for j in range(2):
            ul=(w[j][:])**alp
            uz=(data3[i][:]-z[j][:])**2
            dd[j]=np.inner(ul,uz)
            if j==1 and (dd[0]>dd[1]):
                u[1][i]=1
            if j==1 and (dd[0]<=dd[1]):
                u[0][i]=1
    adds=0
    for j in range(2):
        for i in range(200):
            uu=np.dot(u[j][i],w[j][:])**alp
            uuu=(data3[i][j]-z[j][:])**2
            adds=adds+np.inner(uu,uuu)
    E1=w**alp
    EE=np.sum(E1)+adds
    err=abs(EE-E)
    E=EE
    for i in range(2):
        for h in range(100):
            sum1=0
            for t in range(100):
                sum2=0
                sum3=0
                for i in range(200):
                    sum2=sum2+u[j][i]*((data3[i][j]-z[j][h])**2)
                    sum3=sum3+u[j][i]*((data3[i][t]-z[j][t])**2)
                sum1=sum1+((sum2+lmd)/(sum3+lmd))**(1/(alp-1))
            w[j][h]=1/sum1
    for j in range(2):
        for h in range(100):
            z[j][h]=np.dot(u[j][:],data[:][h])/np.sum(u[j][:])

print(u)
结果:

[[ 1. 1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.

  1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1.

  1.  1.  1. 1.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0.

  0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0.

  0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0.

  0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0.

  0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0.

  0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  0. 0.  0.  1. 1.  1.  1.

  1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1.

  1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1.

  1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1. 1.  1.  1.

  1.  1.]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值