人工智能 chapter 05 K均值
程序员文章站
2022-07-14 21:00:17
...
一。无监督学习:
无监督学习与监督学习的区别:
簇:(先随机找K个簇,然后计算每一个x与k个簇的差值 然后找到最小的就行)
通过npmean(x,axis=0)来计算列的平均值 若axis=1则计算行的平均值
三.代码
计算差值
#encoding=utf8
import math
import numpy as np
def distance(x, y, p=2):
'''
input:x(list):第一个样本的坐标
y(list):第二个样本的坐标
p(int):等于1时为曼哈顿距离,等于2时为欧氏距离
output:distance(float):x到y的距离
'''
#********* Begin *********#
sum = 0
for i in range(len(x)):
sum += math.pow(abs(x[i] - y[i]), p)
distance = math.pow(sum, 1/p)
return distance
#********* End *********#
2.计算质心 以及把差值就行排序
#encoding=utf8
import math
import numpy as np
#计算样本间距离
def distance(x, y, p=2):
'''
input:x(list):第一个样本的坐标
y(list):第二个样本的坐标
p(int):等于1时为曼哈顿距离,等于2时为欧氏距离
output:distance(float):x到y的距离
'''
sum = 0
for i in range(len(x)):
sum += math.pow(abs(x[i] - y[i]), p)
distance = math.pow(sum, 1/p)
return distance
#计算质心
def cal_Cmass(data):
'''
input:data(ndarray):数据样本
output:mass(ndarray):数据样本质心
'''
#********* Begin *********#
Cmass = np.mean(data,axis=0)
#********* End *********#
return Cmass
#计算每个样本到质心的距离,并按照从小到大的顺序排列
def sorted_list(data,Cmass):
'''
input:data(ndarray):数据样本
Cmass(ndarray):数据样本质心
output:dis_list(list):排好序的样本到质心距离
'''
#********* Begin *********#
dis_list=[]
for i in range(len(data)):
dis_list.append(distance(data[i],Cmass))
dis_list.sort()
#********* End *********#
return dis_list
3.sklearn的k-means
#encoding=utf8
from sklearn.cluster import KMeans
def kmeans_cluster(data):
'''
input:data(ndarray):样本数据
output:result(ndarray):聚类结果
'''
#********* Begin *********#
km=KMeans(n_clusters=3,init='random',max_iter=100)
result=km.fit_predict(data)
#********* End *********#
return result
调参数:https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
下一篇: Chapter 6 决策树
推荐阅读