1. Load dataset
from numpy import *
import matplotlib.pyplot as plt
import pandas as pd
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class'] # 5列
dataset = pd.read_csv(url, names=names)
dataset['class'][dataset['class']=='Iris-setosa']=0
dataset['class'][dataset['class']=='Iris-versicolor']=1
dataset['class'][dataset['class']=='Iris-virginica']=2
鸢(yuan1)尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,
每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属
性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。#对类别进行编
码,3个类别分别赋值0,1,2。
2. 计算距离
def distEclud(vecA, vecB):
return sqrt(sum(power(vecA - vecB, 2)))
计算两个向量之间的欧氏距离。输入: 两个向量vecA
和vecB。
使用公式:
3. 初始化聚类中心
# def randCent(dataSet, k):
# #获取特征维度
# n = shape(dataSet)[1]
# #创建聚类中心0矩阵 k x n
# centroids = mat(zeros((k,n)))
# #遍历n维特征
# for j in range(n):
# #第j维特征属性值min ,1x1矩阵
# minJ = min(dataSet[:,j])
# #区间值max-min,float数值
# rangeJ = float(max(dataSet[:,j]) - minJ)
# #第j维,每次随机生成k个中心
# centroids[:,j] = mat(minJ + rangeJ * random.rand(k,1))
# return centroids
def randChosenCent(dataSet,k):
# 样本数
m=shape(dataSet)[0]
# 初始化列表
centroidsIndex=[]
#生成类似于样本索引的列表
dataIndex=list(range(m))
for i in range(k):
#生成随机数
randIndex=random.randint(0,len(dataIndex))
#将随机产生的样本的索引放入centroidsIndex
centroidsIndex.append(dataIndex[randIndex])
#删除已经被抽中的样本
del dataIndex[randIndex]
#根据索引获取样本
centroids = dataSet.iloc[centroidsIndex]
return mat(centroids)