聚类------KNN
import numpy as np
from math import sqrt
import operator as opt
def normData(dataSet):
maxVals = dataSet.max(axis=0)
minVals = dataSet.min(axis=0)
ranges = maxVals - minVals
retData = (dataSet - minVals) / ranges
return retData, ranges, minVals
def kNN(dataSet, labels, testData, k):
distSquareMat = (dataSet - testData) ** 2 # 计算差值的平方
distSquareSums = distSquareMat.sum(axis=1) # 求每一行的差值平方和
distances = distSquareSums ** 0.5 # 开根号,得出每个样本到测试点的距离
sortedIndices = distances.argsort() # 排序,得到排序后的下标
indices = sortedIndices[:k] # 取最小的k个
labelCount = {} # 存储每个label的出现次数
for i in indices:
label = labels[i]
labelCount[label] = labelCount.get(label, 0) + 1 # 次数加一
sortedCount = sorted(labelCount.items(), key=opt.itemgetter(1), reverse=True) # 对label出现的次数从大到小进行排序
return sortedCount[0][0] # 返回出现次数最大的label
if name == "main":
dataSet = np.array([[2, 3], [6, 8],[1,1],[3,4],[5,6]])
normDataSet, ranges, minVals = normData(dataSet)
labels = ['a', 'b','c','a','b']
testData = np.array([3.9, 5.5])
normTestData = (testData - minVals) / ranges
result = kNN(normDataSet, labels, normTestData, 2)
print(result)
调用库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
X为样本特征,Y为样本簇类别, 共1000个样本,每个样本2个特征,共4个簇,簇中心在[-1,-1], [0,0],[1,1], [2,2], 簇方差分别为[0.4, 0.2, 0.2]
X, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1,-1], [0,0], [1,1], [2,2]], cluster_std=[0.4, 0.2, 0.2, 0.2],
random_state =9)
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()
from sklearn.cluster import KMeans
y_pred = KMeans(n_clusters=3, random_state=9).fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
from sklearn import metrics
metrics.calinski_harabaz_score(X, y_pred)
from sklearn import metrics
metrics.calinski_harabaz_score(X, y_pred)
最新文章
- Android音频开发之AudioRecord录音实现
- paip.快捷方式分组管理最佳实践ObjectDock
- 最完整PHP.INI中文版
- 马化腾:办公用QQ休闲用微信[Dream Catchers论坛]
- [转载]新手入门:Spring的一些学习方法及意见
- 反射 reflect 初始学习
- sql server压缩数据库和日志文件
- JavaScript获取HTML页面源代码
- 在Eclipse中添加添加一些有助于开发的插件
- ng-if与ng-show、ng-hide指令的区别和注意事项
- 面向对象设计模式之Interpreter解释器模式(行为型)
- 如何在pl/sql developer 7运行到oracle存储过程设置断点的地方
- Android View动画
- 张佩的Dump服务
- OSI七层模型与TCP/IP五层模型
- aspx页面使用ajax遇到try catch中使用Response.End()报错
- 【PyQt5-Qt Designer】窗口操作
- java-类中需注意的问题
- 一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)
- Android学习之AutoCompleteTextView