k均值聚類
算法邏輯
先進行初始化中心點和每個點的歸屬類
根據每個點與原中心點的距離找到最近的中心點作為歸屬類
根據每一類的所有點的特征計算平均值來確定新的中心點位置
重復2和3直到所有點的歸屬都不再變化為止
python生成隨機數據
一維數據用np.random.rand方法
多維數據就用np.random.multivariate_normal
python保存矩陣到文件
Numpy提供了幾種數據保存的方法。
以3*4數組a為例:
1 tofile
a.tofile("filename.bin")
這種方法只能保存為二進制文件,且不能保存當前數據的行列信息,文件后綴不一定非要是bin,也可以為txt,但不影響保存格式,都是二進制。
這種保存方法對數據讀取有要求,需要手動指定讀出來的數據的的dtype,如果指定的格式與保存時的不一致,則讀出來的就是錯誤的數據。
b = numpy.fromfile("filename.bin",dtype = **)
讀出來的數據是一維數組,需要利用
b.shape = 3,4
重新指定維數。
2 save
numpy.save("filename.npy",a)
利用這種方法,保存文件的后綴名字一定會被置為.npy,這種格式最好只用 numpy.load("filename")
來讀取。
3.savetxt
numpy.savetxt("filename.txt",a)
b = numpy.loadtxt("filename.txt")
用于處理一維和二維數組
python實現矩陣乘法
np.mat創建矩陣,np.dot進行矩陣點乘,具體可以看相關參考
程序實現源代碼
用譜聚類做數據聚類
1. 數據讀取
這里讀取的結果是一個二維數據點組成的向量
2. 根據點的親和度建立圖,并建立鄰接矩陣
設點對親和性(即邊權值)采用如下計算公式:
其中找k個最緊鄰的方法
對每個數據點 xi,首先在所有樣本中找出不包含 xi 的k個最鄰近的樣本點,可以先計算所有點的距離,然后找到距離中的第k小的,比它大的都認為是不相鄰吧
3. 構建拉普拉斯矩陣并歸一化
Lap=D-W
norm_lap=D(-1/2)*Lap*D(-1/2)
4. 計算k個最小的特征值并計算其對應的特征向量
python實現是求出所有的特征值,并外部排序獲得前k小的特征值的下標,從此k個最小的特征值及其對應的特征向量
5. 分類
這里有兩種方法
1.一般做法keans
對特征向量重組,作為特征進行Kmeans聚類
2.簡單做法
直接比較特征向量里面元素的值
程序實現源代碼
橫向對比抽象方法
廣義上講,任何在學習過程中應用到矩陣特征值分解的方法均叫做譜學習方法,比如主成分分析PCA(K-L變換) 譜聚類
譜聚類也可以用來進行圖像前景和后景的分割,用的也是顏色距離聚類的方法
其它用顏色距離聚類方法做圖像分割的還有K均值聚類,而事實上我們設置閾值分割圖像的那個matlab方法,其實上可以看成是二均值聚類
從數據上看,我們都沒有進行分類器的訓練和評價,所以這些都是非監督的學習方法