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)

最新文章

  1. Android音频开发之AudioRecord录音实现
  2. paip.快捷方式分组管理最佳实践ObjectDock
  3. 最完整PHP.INI中文版
  4. 马化腾:办公用QQ休闲用微信[Dream Catchers论坛]
  5. [转载]新手入门:Spring的一些学习方法及意见
  6. 反射 reflect 初始学习
  7. sql server压缩数据库和日志文件
  8. JavaScript获取HTML页面源代码
  9. 在Eclipse中添加添加一些有助于开发的插件
  10. ng-if与ng-show、ng-hide指令的区别和注意事项
  11. 面向对象设计模式之Interpreter解释器模式(行为型)
  12. 如何在pl/sql developer 7运行到oracle存储过程设置断点的地方
  13. Android View动画
  14. 张佩的Dump服务
  15. OSI七层模型与TCP/IP五层模型
  16. aspx页面使用ajax遇到try catch中使用Response.End()报错
  17. 【PyQt5-Qt Designer】窗口操作
  18. java-类中需注意的问题
  19. 一文全解:利用谷歌深度学习框架Tensorflow识别手写数字图片(初学者篇)
  20. Android学习之AutoCompleteTextView

热门文章

  1. [转帖]8个最佳Docker容器监控工具,收藏了
  2. Python多进程方式抓取基金网站内容的方法分析
  3. docker关系图解析
  4. Source Insight 4.0相对路径的设置
  5. xorm-删除和软删除实例
  6. pyspider 数据存入Mysql--Python3
  7. 「UR#5」怎样跑得更快
  8. 【解决方案】文件上具有 Web 标记,请删除 Web 标记
  9. Django:表多对多查询、聚合分组、FQ查询、事务
  10. margin 外边距合并问题