有用请点赞,没用请差评。
欢迎分享本文,转载请保留出处。
代码:
# -*- coding:utf-8 -*-
# kmeans : Bisecting k-means cluster(二分K-means算法)
import numpy as np
import matplotlib.pyplot as plt
def readfile(filename):
"""
读取数据集
W:特征向量数组,只取前两个特征
label:标签(类别)列表
:param filename:
:return:特征向量数组和标签集合列表
"""
save_path="D:\\python3_anaconda3\\学习\机器学习\\机器学习数据集\\"
with open(save_path+filename,'r') as f:
length=len(f.readlines())
print(filename,"length: %d"%length)
W = np.zeros((length,2))
label=[]
i=0
f.seek(0,0)
for line in f.readlines():
linestr=line.strip()
linestrlist=line.split(',')
# print(linestrlist)
# 鸢尾属植物数据集的特征共有四个,我们这里只取前两个特征作为特征向量,当然这样分类肯定是不准确的。
number_data=[float(j) for j in linestrlist[0:2]]
W[i,:]=np.array(number_data)
label.append(linestrlist[4].strip('\n'))
i+=1
return W,label
def createDataset(filename):
"""
创建待分类数据集
"""
data_vector,label_str=readfile(filename)
# print(data_vector,"\n",label)
# 将原始数据集中非字符串标签改为用数字代表,用户后续画图
label_num=[]
for i in label_str:
if i=="Iris-setosa":
label_num.append(0)
elif i=="Iris-versicolor":
label_num.append(1)
else:
label_num.append(2)
return data_vector,label_num
# 计算欧式距离
def euclDistance(vector1,vector2):
return np.sqrt(sum(p