机器学习聚类算法实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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()

相关文档
最新文档