import numpy as np
import operator
dic = {‘a’:4, ‘b’:2, ‘c’:3}
s = sorted(dic.items(),key=operator.itemgetter(1),reverse= True)
print(s)
d = np.array(list(dic.values()))
print(np.argsort(d))
[(‘a’, 4), (‘c’, 3), (‘b’, 2)]
[1 2 0]
以上,结合KNN算法
import numpy as np
import operator
#训练数据
train_x=np.array([[1,1],
[1,2],
[2,1],
[1.5,1.5],
[2,3],
[3,2],
[3,3],
[4,3]])
train_y=np.array(['A',
'A',
'A',
'A',
'B',
'B',
'B',
'B'])
test_data = np.array([[2,4]])
#请使用knn算法 预测 测试数据属于哪个类别 k=3
"""
1.计算测试数据和所有样本数据之间距离
2.对所有距离进行排序
3.取前k个最近的样本
4.使用少数服从多数的方法 输出结果
"""
def knn(train_x,train_y,test_data,k):
#1.计算测试数据和所有样本数据之间距离
dist = np.sum((test_data-train_x)**2,axis=1)**0.5
#2.对所有距离进行排序
sortedIndex = np.argsort(dist)
#3.取前k个最近的样本所对应的类别的个数
classCount = {}
for i in range(k):
#获取前k个最近距离样本的标签
label = train_y[sortedIndex[i]]
classCount[label]=classCount.get(label,0)+1
print(classCount)
#4.使用少数服从多数的方法 输出结果
return sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)[0][0]
if __name__=="__main__":
print(knn(train_x, train_y, test_data, 3))
# #创建模型
# classifier = KNeighborsClassifier(n_neighbors=5)
# #训练模型
# classifier.fit(train_x,train_y)
# #预测
# result= classifier.predict(test_data)
# print(result)
# #输出概率
# print(classifier.predict_proba(test_data))
结果如下:
{‘B’: 1}
{‘B’: 2}
{‘B’: 2, ‘A’: 1}
下面注释部分为调用SKLEARN解法