ML一:python的KNN算法
生活随笔
收集整理的這篇文章主要介紹了
ML一:python的KNN算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?(1):list的排序算法:
參考鏈接:http://blog.csdn.net/horin153/article/details/7076321
示例: DisListSorted = sorted(DisList, key = lambda DisList: DisList[1], reverse =False) 使用lambda函數,利用元素索引作為key;
在 Python 中, 當需要對一個 list 排序時, 一般可以用 list.sort() 或者 sorted(iterable[, cmp[, key[, reverse]]]).
其中:
cmp(e1, e2) 是帶兩個參數的比較函數, 返回值: 負數: e1 < e2, 0: e1 == e2, 正數: e1 > e2. 默認為 None, 即用內建的比較函數;
key 是帶一個參數的函數, 用來為每個元素提取比較值. 默認為 None, 即直接比較每個元素;
reverse 是一個布爾值, 表示是否反轉比較結果.。reverse =False 代表從小到大...
(2):幾種排序算法:
1, 通常, key 和 reverse 比 cmp 快很多, 因為對每個元素它們只處理一次; 而 cmp 會處理多次. 也就是說, 同等情況下, 寫 key 函數比寫 cmp 函數要高效很多.2, 對一些貌似比較復雜的排序, 也是不需要寫 cmp 函數的, 舉例如下: >>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),]用元素索引做 key: >>> sorted(students, key=lambda student: student[2]) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]用元素已經命名的屬性做 key: >>> sorted(students, key=lambda student: student.age) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]用 operator 函數來加快速度, 上面兩個排序等價于: >>> from operator import itemgetter, attrgetter >>> sorted(students, key=itemgetter(2)) >>> sorted(students, key=attrgetter('age'))用 operator 函數進行多級排序, 這個就是比較復雜的應用. 按我以前的理解, 是一定要寫個定制的 cmp 函數的. 現在看來, 以前真的夠笨. # sort by grade then by age >>> sorted(students, key=itemgetter(1,2)) [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)] >>> sorted(students, key=attrgetter('grade', 'age')) [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]3, 根據字典值排序 >>> d = {'a':2, 'b':23, 'c':5, 'd':17, 'e':1}#1, 返回 pair 對: from operator import itemgetter >>> sorted(d.iteritems(), key=itemgetter(1), reverse=True) [('b', 23), ('d', 17), ('c', 5), ('a', 2), ('e', 1)]#2, 僅返回 keys: >>> sorted(d, key=d.__getitem__, reverse=True) ['b', 'd', 'c', 'a', 'e']4, sorted() 會返回一個新的已經排好序的 list. list.sort() 是就地排序, 以節約空間, 當然就不會返回一個排好序的新的 list 了. 這對大的 list 排序是有空間優勢的.?
(3):KNN算法實例:
<p>#? DataMatrix 為向量數組 列表 </p><p>?def creatDataSetLabel(DataMatrix, LabelVec):Classifier ={}if len (LabelVec) !=len (DataMatrix):return Classifierfor idx in range(len (LabelVec)):Classifier[LabelVec[idx] ]? = DataMatrix[idx]?????? ?return Classifier</p> <p>#filename 為文件夾 </p><p>def?? trainClassifier(filename):DataMatrix= creatDataSet(filename)LabelNum? = len(DataMatrix )LabelVec? = creatLabel(LabelNum)Classifier= creatDataSetLabel(DataMatrix,LabelVec)return Classifier </p><p> </p><p>#輸入向量,返回k近鄰! </p><p>def classify(Classifier, Feature ,K):if len(Feature) != len(Classifier[0] ):return 0kNear = []Distance ={}# similarityfor i in range(len(Classifier) ):DisVec = Classifier[i] - FeatureDisMat = DisVec **2Distance[i] = DisMat.sum()DisList =[]for key in Distance:DisList.append([key, Distance[key] ])</p><p>DisListSorted = sorted(DisList, key = lambda DisList: DisList[1], reverse =False) #排序 距離for i in range(K):kNear.append(DisListSorted[i] ) return kNear </p>總結
以上是生活随笔為你收集整理的ML一:python的KNN算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建行房贷提前还款新政策2022,房贷提前
- 下一篇: 贝壳找房怎么发布房源