机器学习聚类算法实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《人工智能与机器学习》
实验报告
年级__ xxxx班____________
专业___________xxxxx____ _____
学号____________6315070301XX___________
姓名_____________gllh________________
日期___________2018-5-12 __
实验五聚类算法实现
一、实验目的
1、了解常用聚类算法及其优缺点
2、掌握k-means聚类算法对数据进行聚类分析的基本原理和划分方法
3、利用k-means聚类算法对已知数据集进行聚类分析
实验类型:验证性
计划课间:4学时
二、实验内容
1、利用python的sklearn库函数对给定的数据集进行聚类分析
2、分析k-means算法的实现流程
3、根据算法描述编程实现,调试运行
4、对所给数据集进行验证,得到分析结果
三、实验步骤
1、k-means算法原理
2、k-means算法流程
3、k-means算法实现
4、对已知数据集进行分析
四、实验结果分析
1.利用python的sklearn库函数对给定的数据集进行聚类分析:
其中数据集选取iris鸢尾花数据集
import numpy as np
from sklearn.datasets import load_iris
iris = load_iris()
def dist(x,y):
return sum(x*y)/(sum(x**2)*sum(y**2))**0.5
def K_means(data=iris.data,k=3,ping=0,maxiter=100):
n, m = data.shape
centers = data[:k,:]
while ping < maxiter:
dis = np.zeros([n,k+1])
for i in range(n):
for j in range(k):
dis[i,j] = dist(data[i,:],centers[j,:])
dis[i,k] = dis[i,:k].argmax()
centers_new = np.zeros([k,m])
for i in range(k):
index = dis[:,k]==i
centers_new[i,:] = np.mean(data[index,:],axis=0) if np.all(centers==centers_new):
break
centers = centers_new
ping += 1
return dis
if __name__ == '__main__':
res = K_means()
print(res)
(1)、首先求出样本之间的余弦相似度:
sum(x*y)/(sum(x**2)*sum(y**2))**0.5
(2)、设置k类别数为3,最大迭代次数为100
K_means(data=iris.data,k=3,ping=0,maxiter=100):
(3)、设置样本个数、属性个数并初始化类中心
n, m = data.shape
centers = data[:k,:]
(4)、求各样本至各类中心的距离
for i in range(n):
for j in range(k):
dis[i,j] = dist(data[i,:],centers[j,:])
dis[i,k] = dis[i,:k].argmax()
(5)、求新类中心:各类样本均值作为新类中心
for i in range(k):
index = dis[:,k]==i
centers_new[i,:] = np.mean(data[index,:],axis=0) 实验结果:
2.使用自己的数据集进行聚类分析并进行可视化:# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
from sklearn.cluster import Birch
from sklearn.cluster import KMeans
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties
df = pd.read_csv("fa.csv",encoding = "utf-8")
X = df[['height','weight']].values
clf = KMeans(n_clusters=2)
y_pred = clf.fit_predict(X)
print(clf)
print(y_pred)
x = [n[0] for n in X]
print (x)
y = [n[1] for n in X]
print (y)
plt.scatter(x, y, c=y_pred, marker='o')
plt.title("K-means Boy/Girl-height-weight Data")
plt.xlabel("Height/cm")
plt.ylabel("Weight/kg")
plt.legend(["Position"])
plt.show()