Implementierung des K-Means-Algorithmus in Python

小云云
Freigeben: 2017-12-06 10:28:10
Original
1875 Leute haben es durchsucht

K-means ist ein häufig verwendeter Algorithmus für maschinelles Lernen. Er wird häufig zum Clustern von Daten verwendet. Sie müssen lediglich die Anzahl der Cluster angeben, um Daten automatisch in mehrere Kategorien einzuteilen. Die Datenähnlichkeit im selben Cluster ist hoch und die Datenähnlichkeit in verschiedenen Clustern gering.

Der K-MEANS-Algorithmus ist ein Algorithmus, der die Anzahl der Cluster k und eine Datenbank mit n Datenobjekten eingibt und k Cluster ausgibt, die das Kriterium der minimalen Varianz erfüllen. Der k-means-Algorithmus akzeptiert eine Eingabemenge k; dann werden n Datenobjekte in k Cluster unterteilt, sodass die erhaltenen Cluster Folgendes erfüllen: Die Ähnlichkeit von Objekten im selben Cluster ist höher und die Ähnlichkeit von Objekten in verschiedenen Clustern ist kleiner. In diesem Artikel wird Ihnen die Implementierung des K-Means-Algorithmus in Python vorgestellt.

Kernidee

Finden Sie iterativ ein Partitionierungsschema für k Cluster, sodass der Mittelwert dieser k Cluster zur Darstellung der entsprechenden Stichprobentypen verwendet wird Der Fehler ist am kleinsten.

k Cluster haben die folgenden Eigenschaften: Jeder Cluster selbst ist so kompakt wie möglich und jeder Cluster ist so getrennt wie möglich.

Die Grundlage des K-Means-Algorithmus ist das Kriterium der minimalen Fehlerquadratsumme:

Vorteile :

Einfaches Prinzip

Schnelle Geschwindigkeit
Gute Skalierbarkeit für große Datenmengen

Nachteile:

Bedarf anzugeben Die Anzahl der Cluster K

reagiert empfindlich auf Ausreißer
reagiert empfindlich auf Anfangswerte

Der Clustering-Prozess von K-Mitteln

it Der Clustering-Prozess ähnelt dem Gradientenabstiegsalgorithmus. Der Wert der Kostenfunktion wird durch Iterationen immer kleiner.

Wählen Sie die Anfangszentren der c-Klassen entsprechend aus 🎜>Ermitteln Sie in der k-ten Iteration für jede Stichprobe den Abstand zu c-Zentren und klassifizieren Sie die Stichprobe in die Klasse des Mittelpunkts mit dem kürzesten Abstand.

Verwenden Sie Methoden wie „Mittelwert“, um den Mittelpunktswert zu aktualisieren der Klasse;
Wenn der Wert nach der Aktualisierung mit der Iterationsmethode von (2) (3) unverändert bleibt, endet die Iteration, andernfalls wird die Iteration fortgesetzt.

Der größte Vorteil dieses Algorithmus ist seine Einfachheit und Geschwindigkeit. Der Schlüssel zum Algorithmus liegt in der Auswahl des Anfangszentrums und der Abstandsformel.

K-bedeutet Beispieldarstellung


Einige Parameter von km in Python:


sklearn.cluster.KMeans(
  n_clusters=8,
  init='k-means++', 
  n_init=10, 
  max_iter=300, 
  tol=0.0001, 
  precompute_distances='auto', 
  verbose=0, 
  random_state=None, 
  copy_x=True, 
  n_jobs=1, 
  algorithm='auto'
  )
n_clusters: 簇的个数,即你想聚成几类
init: 初始簇中心的获取方法
n_init: 获取初始簇中心的更迭次数,为了弥补初始质心的影响,算法默认会初始10个质心,实现算法,然后返回最好的结果。
max_iter: 最大迭代次数(因为kmeans算法的实现需要迭代)
tol: 容忍度,即kmeans运行准则收敛的条件
precompute_distances:是否需要提前计算距离,这个参数会在空间和时间之间做权衡,如果是True 会把整个距离矩阵都放到内存中,auto 会默认在数据样本大于featurs*samples 的数量大于12e6 的时候False,False 时核心实现的方法是利用Cpython 来实现的
verbose: 冗长模式(不太懂是啥意思,反正一般不去改默认值)
random_state: 随机生成簇中心的状态条件。
copy_x: 对是否修改数据的一个标记,如果True,即复制了就不会修改数据。bool 在scikit-learn 很多接口中都会有这个参数的,就是是否对输入数据继续copy 操作,以便不修改用户的输入数据。这个要理解Python 的内存机制才会比较清楚。
n_jobs: 并行设置
algorithm: kmeans的实现算法,有:'auto', ‘full', ‘elkan', 其中 ‘full'表示用EM方式实现
虽然有很多参数,但是都已经给出了默认值。所以我们一般不需要去传入这些参数,参数的。可以根据实际需要来调用。
Nach dem Login kopieren


Das Folgende zeigt ein Codebeispiel


from sklearn.cluster import KMeans
from sklearn.externals import joblib
from sklearn import cluster
import numpy as np

# 生成10*3的矩阵
data = np.random.rand(10,3)
print data
# 聚类为4类
estimator=KMeans(n_clusters=4)
# fit_predict表示拟合+预测,也可以分开写
res=estimator.fit_predict(data)
# 预测类别标签结果
lable_pred=estimator.labels_
# 各个类别的聚类中心值
centroids=estimator.cluster_centers_
# 聚类中心均值向量的总和
inertia=estimator.inertia_

print lable_pred
print centroids
print inertia

代码执行结果
[0 2 1 0 2 2 0 3 2 0]

[[ 0.3028348  0.25183096 0.62493622]
 [ 0.88481287 0.70891813 0.79463764]
 [ 0.66821961 0.54817207 0.30197415]
 [ 0.11629904 0.85684903 0.7088385 ]]
 
0.570794546829
Nach dem Login kopieren


Eine intuitivere Beschreibung finden Sie hier Da es intuitiver ist, zwei Dimensionen auf dem Bild zu zeichnen, werden 100 Punkte zum Zeichnen ausgewählt >


from sklearn.cluster import KMeans
from sklearn.externals import joblib
from sklearn import cluster
import numpy as np
import matplotlib.pyplot as plt

data = np.random.rand(100,2)
estimator=KMeans(n_clusters=3)
res=estimator.fit_predict(data)
lable_pred=estimator.labels_
centroids=estimator.cluster_centers_
inertia=estimator.inertia_
#print res
print lable_pred
print centroids
print inertia

for i in range(len(data)):
  if int(lable_pred[i])==0:
    plt.scatter(data[i][0],data[i][1],color='red')
  if int(lable_pred[i])==1:
    plt.scatter(data[i][0],data[i][1],color='black')
  if int(lable_pred[i])==2:
    plt.scatter(data[i][0],data[i][1],color='blue')
plt.show()
Nach dem Login kopieren


Sie können sehen, dass der Clustering-Effekt immer noch gut ist. Wir haben einen Test zur Clustering-Effizienz von k- durchgeführt. Mittel und erweitert die Dimension auf 50 Dimension

Für Millionen von Daten ist die Anpassungszeit immer noch akzeptabel Die Erhaltung des Modells ähnelt anderen Modellen für maschinelles Lernen. Speichern Sie so etwas wie


数据规模消耗时间数据维度
10000条4s50维
100000条30s50维
1000000条4'13s50维

Der obige Inhalt ist hoffentlich die Implementierung des K-Means-Algorithmus in Python es kann jedem helfen.


Verwandte Empfehlungen:

from sklearn.externals import joblib
joblib.dump(km,"model/km_model.m")
Nach dem Login kopieren

Verwenden Sie den K-Means-Clustering-Algorithmus, um die Hauptfarbe des Bildes zu identifizieren

Verwenden Sie den K-Means-Clustering-Algorithmus um das Bild zu identifizieren Hauptfarbe_PHP-Tutorial

Bildverständnis des K-Means-Algorithmus

Das obige ist der detaillierte Inhalt vonImplementierung des K-Means-Algorithmus in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!