kmeans和knn相同點和不同點:
一、k最近鄰(knn,k-nearestneighbor)分類演算法,找到最近的k個鄰居(樣本),在前k個樣本中選擇頻率最高的類別作為**類別。
步驟:1)算距離:給定測試物件,計算它與訓練集中的每個物件的距離 2)找鄰居:圈定距離最近的k個訓練物件,作為測試物件的近鄰 3)做分類:根據這k個近鄰歸屬的主要類別,來對測試物件分類
二、k-means演算法-聚類:是一種無監督的學習,將相似的物件歸到同一簇中。聚類的方法幾乎可以應用所有物件,簇內的物件越相似,聚類的效果就越好。k-means演算法中的k表示的是聚類為k個簇,means代表取每乙個聚類中資料值的均值作為該簇的中心,或者稱為質心,即用每乙個的類的質心對該簇進行描述。
步驟:1)首先,隨機確定k個初始點的質心;
2)然後將資料集中的每乙個點分配到乙個簇中(即為每乙個點找到距其最近的質心,並將其分配給該質心所對應的簇);
3)該步完成後,每乙個簇的質心更新為該簇所有點的平均值
區別1:聚類和分類最大的不同在於,分類的目標是事先已知的,而聚類則不一樣,聚類事先不知道目標變數是什麼,類別沒有像分類那樣被預先定義出來,所以,聚類有時也叫無監督學習。聚類分析試圖將相似的物件歸入同一簇,將不相似的物件歸為不同簇
區別2:k-means演算法雖然比較容易實現,但是其可能收斂到區域性最優解,且在大規模資料集上收斂速度相對較慢。
分別的特點:
knn:
1)knn屬於惰性學習(lazy-learning)
這是與急切學習(eager learning)相對應的,因為knn沒有顯式的學習過程!也就是說沒有訓練階段,資料集事先已有了分類和特徵值,待收到新樣本後直接進行處理。在訓練階段只是把資料儲存下來,訓練時間開銷為0,等收到測試樣本後進行處理。
(2)knn的計算複雜度較高
新樣本需要與資料集中每個資料進行距離計算,計算複雜度和資料集中的資料數目n成正比,也就是說,knn的時間複雜度為o(n),因此knn一般適用於樣本數較少的資料集。
(3)k取不同值時,分類結果可能會有顯著不同。
優點:精度高,對異常值不敏感、無資料輸入假定
缺點:計算複雜度高、空間複雜度高
k-means:
1)在 k-means 演算法中 k 是事先給定的,這個 k 值的選定是非常難以估計的。很多時候,事先並不知道給定的資料集應該分成多少個類別才最合適;
2)在 k-means 演算法中,首先需要根據初始聚類中心來確定乙個初始劃分,然後對初始劃分進行優化。這個初始聚類中心的選擇對聚類結果有較大的影響,一旦初始值選擇的不好,可能無法得到有效的聚類結果;
3)該演算法需要不斷地進行樣本分類調整,不斷地計算調整後的新的聚類中心,因此當資料量非常大時,演算法的時間開銷是非常大的。
k-means演算法對於不同的初始值,可能會導致不同結果。解決方法:
1.多設定一些不同的初值,對比最後的運算結果,一直到結果趨於穩定結束
2.很多時候,事先並不知道給定的資料集應該分成多少個類別才最合適。通過類的自動合併和**,得到較為合理的型別數目 k,例如 isodata 演算法。
k-means演算法的其他改進演算法:
1. k-modes 演算法:實現對離散資料的快速聚類,保留了k-means演算法的效率同時將k-means的應用範圍擴大到離散資料。
2. k-prototype演算法:可以對離散與數值屬性兩種混合的資料進行聚類,在k-prototype中定義了乙個對數值與離散屬性都計算的相異性度量標準。
knnk-means
目的是為了確定乙個點的分類
目的是為了將一系列點集分成k類
knn是分類演算法
k-means是聚類演算法
監督學習,分類目標事先已知
非監督學習,將相似資料歸到一起從而得到分類,沒有外部分類
訓練資料集有label,已經是完全正確的資料
訓練資料集無label,是雜亂無章的,經過聚類後才變得有點順序,先無序,後有序
沒有明顯的前期訓練過程,屬於memory-based learning
有明顯的前期訓練過程
k的含義:「k」是用來計算的相鄰資料數。來了乙個樣本x,要給它分類,即求出它的y,就從資料集中,在x附近找離它最近的k個資料點,這k個資料點,類別c佔的個數最多,就把x的label設為c
k的含義:「k」是類的數目。k是人工固定好的數字,假設資料集合可以分為k個簇,由於是依靠人工定好,需要一點先驗知識
k值確定後每次結果固定
k值確定後每次結果可能不同,從 n個資料物件任意選擇 k 個物件作為初始聚類中心,隨機性對結果影響較大
時間複雜度:o(n)
時間複雜度:o(n*k*t),t為迭代次數
相似點:都包含這樣的過程,給定乙個點,在資料集中找離它最近的點。即二者都用到了nn(nears neighbor)演算法,一般用kd樹來實現nn。
k-means評估:
1.輪廓係數
輪廓係數(silhouette coefficient)結合了聚類的凝聚度(cohesion)和分離度(separation),用於評估聚類的效果。該值處於-1~1之間,值越大,表示聚類效果越好。具體計算方法如下:
對於第i個元素x_i,計算x_i與其同乙個簇內的所有其他元素距離的平均值,記作a_i,用於量化簇內的凝聚度。
選取x_i外的乙個簇b,計算x_i與b中所有點的平均距離,遍歷所有其他簇,找到最近的這個平均距離,記作b_i,用於量化簇之間分離度。
對於元素x_i,輪廓係數s_i = (b_i – a_i)/max(a_i,b_i)
計算所有x的輪廓係數,求出平均值即為當前聚類的整體輪廓係數
從上面的公式,不難發現若s_i小於0,說明x_i與其簇內元素的平均距離小於最近的其他簇,表示聚類效果不好。如果a_i趨於0,或者b_i足夠大,那麼s_i趨近與1,說明聚類效果比較好。
2.sse:
一種用於度量聚類效果的指標是sse,即誤差平方和, 為所有簇中的全部資料點到簇中心的誤差距離的平方累加和(sse簇1+sse簇2+...sse簇n)。sse的值如果越小,表示資料點越接近於它們的簇中心,即質心,聚類效果也越好。因為,對誤差取平方後,就會更加重視那些遠離中心的資料點。
knn和k-means k值選取:
knn:
有人用cross validation,有人用貝葉斯,還有的用bootstrap。
k值的選擇:對k近鄰演算法的結果會產生重大影響。
k值較小:就相當於用較+小的領域中的訓練例項進行**,「學習」近似誤差會減小, k值的減小就意味著整體模型變得複雜,容易發生過擬合;
k值較大:就相當於用較大領域中的訓練例項進行**,其優點是可以減少學習的估計誤差,但缺點是學習的近似誤差會增大。這時候,與輸入例項較遠(不相似的)訓練例項也會對**器作用,使**發生錯誤,且k值的增大就意味著整體的模型變得簡單。k很大,那麼可以減少干擾資料的影響,但是此時就導致了系統性偏差(k值太小會造成過度擬合),比如如果取k為總的訓練資料數,那麼每次投票肯定都是訓練資料中多的類別勝利。顯然訓練資料的系統性偏差會影響結果。
在實際應用中,k值一般取乙個比較小的數值,例如採用交叉驗證法(簡單來說,就是一部分樣本做訓練集,一部分做測試集)來選擇最優的k值。
通常情況下,選擇不同的k 會使得我們的演算法的表現有好有壞,我們需要對 k 經過多種嘗試,來決定到底使用多大的 k 來作為最終引數。k通常會在3~10直接取值,或者是k等於訓練資料的平方根。比如15個資料,可能會取k=4。在實際中,我們應該通過交叉驗證的辦法來確定k值。
k-means:
在實際應用中,由於kmean一般作為資料預處理,或者用於輔助分類貼標籤。所以k一般不會設定很大。可以通過列舉,令k從2到乙個固定值如10,在每個k值上重 復執行數次kmeans(避免區域性最優解),並計算當前k的平均輪廓係數,最後選取輪廓係數最大的值對應的k作為最終的集群數目
SCP和SFTP相同點和區別
都是使用ssh協議來傳輸檔案的。不用說檔案內容,就是登入時的使用者資訊都是經過ssh加密後才傳輸的,所以說scp和sftp實現了安全的檔案傳輸。scp和cp命令相似,sftp和ftp的使用方法也類似。scp和sftp的共同之處在於 使用ssh將檔案加密才傳輸的 使用 winscp 或者 filezi...
SCP和SFTP相同點和區別
都是使用ssh協議來傳輸檔案的。不用說檔案內容,就是登入時的使用者資訊都是經過ssh加密後才傳輸的,所以說scp和sftp實現了安全的檔案傳輸。scp和cp命令相似,sftp和ftp的使用方法也類似。scp和sftp的共同之處在於 使用ssh將檔案加密才傳輸的 使用 winscp 或者 filezi...
指標和引用的相同點和不同點
相同點 都是位址的概念 指標指向一塊記憶體,它的內容是所指記憶體的位址 而引用則是某塊記憶體的別名。不同點 指標是乙個實體,而引用僅是個別名 引用只能在定義時被初始化一次,之後不可變 指標可變 引用 從一而終 指標可以 見異思遷 引用沒有const,指標有const,const的指標不可變 引用不能...