机器学习--原型聚类

整体思路:创建随机据类数据集,然后对其进行分类,然后画散点图

####小编第一次自己用python写的东西,在这里先说明一下,注意矩阵到list转化,注意注意注意#####

import numpy as np 
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
X, y = make_blobs(n_samples=300, n_features=2, centers=[[1,1], [5,5], [2,9]], cluster_std=[0.4, 0.5, 0.2])
这里面的X是生成的数据(300*2),y 为种类这里我没有用到
avg1=X[0:3,:] #这是三个类别的平均值,开始随机选的三个点作为开始的平均值。
L=[4]*len(X)#装数据种类用的
distance=[4]*(len(X))#每个点到最近的那个点的距离
#print(distance)
def plant(s1,s2,s3):
    plt.scatter(s1[:, 0], s1[:, 1], marker='x', c='r')
    # print(s2)
    plt.scatter(s2[:, 0], s2[:, 1], marker='v', c='b')
    plt.scatter(s3[:, 0], s3[:, 1], marker='o', c='g')
    plt.show()
for x in range(2):#这里用了最少的两次,想不明白为什么两次就可以分开????????????
    s1=[]  #用来存分完类的数据
    s2=[]
    s3=[]
    l=len(X)
    for j in range(l):
        L[j]=0
        distance[j]=np.linalg.norm(X[j] - avg1[0])#计算两个向量之间的距离
        AVG=avg1[1:3,:]
        i1=1;
        for j1 in AVG :                       #求得最小距离
            dis=np.linalg.norm(X[j] - j1)     #
            if(dis<distance[j]):               #
                L[j]=i1;                       #
                distance[j]=dis                 #
            i1=i1+1;
        if(L[j]==0):
            s1.append(X[j])
        elif(L[j]==1):
            s2.append(X[j])
        else:
            s3.append(X[j])
    s1=np.array(s1)
    s2 = np.array(s2)
    s3 = np.array(s3)

    s=[]
    s.append(s1)
    s.append(s2)
    s.append(s3)
    avg1f=avg1
    avg2=list(avg1f)
    for k in range(3):
        avg=np.mean(s[k],axis=0) #avg array
        for i in range(2):
            if(avg[i]==avg1[k][i]):
                pass
            else:
                avg1[k]=avg
    plant(s1,s2,s3)










散点图
散点图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值