Es ist ein Herausforderungsrekord von 100 Sprachverarbeitungsklopfen 2015. Die Umgebung ist Ubuntu 16.04 LTS + Python 3.5.2 : : Anaconda 4.1.1 (64-Bit). Klicken Sie hier, um eine Liste der vergangenen Schläge anzuzeigen (http://qiita.com/segavvy/items/fb50ba8097d59475f760).
In Kapitel 10 werden wir weiter daran arbeiten, Wortvektoren aus dem vorherigen Kapitel zu lernen.
Führen Sie k-means Clustering für einen Wortvektor von> 96 mit der Anzahl der Cluster $ k = 5 $ aus.
main.py
# coding: utf-8
import pickle
from collections import OrderedDict
from scipy import io
import numpy as np
from sklearn.cluster import KMeans
fname_dict_index_t = 'dict_index_country'
fname_matrix_x300 = 'matrix_x300_country'
#Wörterbuch lesen
with open(fname_dict_index_t, 'rb') as data_file:
dict_index_t = pickle.load(data_file)
#Matrix lesen
matrix_x300 = io.loadmat(fname_matrix_x300)['matrix_x300']
#KMeans Clustering
predicts = KMeans(n_clusters=5).fit_predict(matrix_x300)
# (Land,Klassennummer)Aufführen
result = zip(dict_index_t.keys(), predicts)
#Nach Klassifizierungsnummer und Anzeige sortieren
for country, category in sorted(result, key=lambda x: x[1]):
print('{}\t{}'.format(category, country))
Die Klassifizierungsnummern von 0 bis 4 und die Ländernamen werden durch Tabulatoren getrennt ausgegeben.
Ausführungsergebnis
0 Andorra
0 Antarctica
0 Antigua_and_Barbuda
0 Bahamas
0 Bahrain
0 Barbados
0 Belarus
0 Belize
0 Benin
0 Bermuda
0 Bhutan
0 Bosnia_and_Herzegovina
0 Botswana
0 Burkina_Faso
0 Burundi
0 Cameroon
0 Central_African_Republic
0 Chad
0 Commonwealth_of_Australia
0 Comoros
0 Congo
0 Cook_Islands
0 Democratic_Republic_of_the_Congo
0 Djibouti
0 Dominica
0 Dominican_Republic
0 Ecuador
0 Eritrea
0 Estonia
0 Federal_Republic_of_Germany
0 Federated_States_of_Micronesia
0 French_Republic
0 Gabon
0 Gambia
0 Gibraltar
0 Greenland
0 Grenada
0 Guadeloupe
0 Guam
0 Guatemala
0 Guinea-Bissau
0 Guyana
0 Haiti
0 Honduras
0 Jamaica
0 Jordan
0 Kazakhstan
0 Kingdom_of_the_Netherlands
0 Kiribati
0 Kuwait
0 Kyrgyzstan
0 Lao
0 Latvia
0 Lesotho
0 Liberia
0 Liechtenstein
0 Luxembourg
0 Macau
0 Madagascar
0 Malawi
0 Maldives
0 Mali
0 Martinique
0 Mauritania
0 Mauritius
0 Mayotte
0 Micronesia
0 Moldova
0 Monaco
0 Mongolia
0 Montenegro
0 Mozambique
0 Myanmar
0 Namibia
0 Nauru
0 Nicaragua
0 Niger
0 Niue
0 Oman
0 Palau
0 Paraguay
0 Qatar
0 Republic_of_Albania
0 Republic_of_Armenia
0 Republic_of_Austria
0 Republic_of_Congo
0 Republic_of_Croatia
0 Republic_of_Estonia
0 Republic_of_Korea
0 Republic_of_Poland
0 Republic_of_Singapore
0 Republic_of_South_Africa
0 Republic_of_Turkey
0 Republic_of_the_Philippines
0 Russian_Federation
0 Rwanda
0 Saint_Lucia
0 Senegal
0 Seychelles
0 Slovenia
0 Solomon_Islands
0 Somalia
0 State_of_Israel
0 Suriname
0 Swaziland
0 Tajikistan
0 Tibet
0 Timor-Leste
0 Togo
0 Tokelau
0 Tonga
0 Tunisia
0 Turkmenistan
0 Tuvalu
0 United_Arab_Emirates
0 United_States_of_America
0 Uzbekistan
0 Vanuatu
0 Vatican
0 Yemen
0 Zambia
0 Zimbabwe
1 Austria
1 Belgium
1 Bulgaria
1 Denmark
1 Egypt
1 France
1 Germany
1 Greece
1 Hungary
1 Ireland
1 Italy
1 Macedonia
1 Netherlands
1 Norway
1 Poland
1 Portugal
1 Romania
1 Spain
1 Sweden
2 Afghanistan
2 China
2 India
2 Iraq
2 Israel
2 Korea
2 Pakistan
2 Taiwan
2 United_States
2 Vietnam
3 Argentina
3 Australia
3 Brazil
3 Canada
3 Japan
3 Mexico
3 New_Zealand
3 Switzerland
4 Albania
4 Algeria
4 Angola
4 Armenia
4 Azerbaijan
4 Bangladesh
4 Bolivia
4 Cambodia
4 Chile
4 Colombia
4 Croatia
4 Cuba
4 Cyprus
4 Czech_Republic
4 Ethiopia
4 Fiji
4 Finland
4 Georgia
4 Ghana
4 Guinea
4 Iceland
4 Indonesia
4 Iran
4 Kenya
4 Kosovo
4 Lebanon
4 Libya
4 Lithuania
4 Malaysia
4 Malta
4 Morocco
4 Nepal
4 Nigeria
4 Panama
4 People's_Republic_of_China
4 Peru
4 Philippines
4 Samoa
4 Serbia
4 Singapore
4 Slovakia
4 Sudan
4 Syria
4 Tanzania
4 Thailand
4 Turkey
4 Uganda
4 Ukraine
4 Uruguay
4 Venezuela
Es gibt zwei Hauptmethoden zum Klassifizieren von Daten: Klassifizierung (Klassifizierung) und Clustering (Clustering).
Die Klassifizierung ist eine Methode zur Vordefinition von Gruppen (Klassen), beispielsweise wenn Nachrichten in vordefinierte Gruppen wie "Politik", "Wirtschaft" und "Sport" verteilt werden. Wird auch als Klassifizierung bezeichnet.
Clustering ist eine Methode zum Extrahieren von Clustern ähnlicher Personen, ohne vorher Gruppen zu definieren. Wenn Sie eine große Datenmenge analysieren, können Sie nicht alle Daten sehen, sodass Sie sie grob in ähnliche Blöcke gruppieren und die Eigenschaften und Trends der einzelnen Blöcke anzeigen können. Was für eine Gruppe ist dieses Thema, um es in fünf zu teilen? Es gibt keine Definition. Daher verwenden wir Clustering.
Das Clustering-Verfahren ist unterteilt in nicht hierarchisches Clustering wie das diesmal verwendete K-Means und hierarchisches Clustering wie das im nächsten Problem 98 verwendete Ward-Verfahren.
Der grundlegende Algorithmus von K-Means ist einfach.
Wählen Sie zunächst die Mitte der angegebenen Anzahl von Clustern im Vektorraum aus. Überprüfen Sie dann für jede Daten den Abstand zum Zentrum jedes Clusters und verteilen Sie ihn auf den Cluster mit dem nächstgelegenen Zentrum. Damit ist die erste Verteilung abgeschlossen. Überprüfen Sie nach dem Sortieren die durchschnittliche Punktzahl der Daten, die zu jedem Cluster gehören, und verwenden Sie sie als neuen Mittelpunkt für diesen Cluster. Setzen Sie hier die Datenverteilung einmal zurück, überprüfen Sie den Abstand zum neuen Zentrum jedes Clusters für jede Daten erneut und ordnen Sie sie dem Cluster mit dem nächstgelegenen Zentrum neu zu. Damit ist die zweite Verteilung abgeschlossen. Wiederholen Sie diesen Vorgang, bis sich die Mitte kaum noch bewegt und Sie fertig sind.
Wenn Sie googeln, werden viele Erklärungen zu K-Means veröffentlicht, daher werde ich die Details weglassen. Sie können in Woche 8 bei Coursera Maschinelles Lernen studieren.
Das Clustering mit K-Means verwendet scikit-learn, das in Problem 85 gestartet wurde. Es ist einfach zu bedienen.
Geben Sie die Anzahl der Cluster in der Klasse sklearn.cluster.KMeans
und in der Klasse [fit_predict ()
] an. Wenn Sie eine Matrix unter (http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans.fit_predict) übergeben, wird ein Clustering und ein Array von Klassifizierungsnummern für jede Zeile durchgeführt Sie können erhalten (Wertebereich von 0 bis Anzahl der Cluster-1).
Der Mittelpunkt des ersten ausgewählten Clusters ist zufällig. Daher kann sich das Ergebnis bei jeder Ausführung geringfügig ändern. Wenn Sie es nicht ändern möchten, geben Sie random_state
von sklearn.cluster.KMeans
an, um eine Zufallszahl zu erhalten. Sie können den Startwert von angeben.
In diesem Programm habe ich versucht, nach Klassifizierungsnummer zu sortieren und anzuzeigen. Selbst wenn Sie sich die Ergebnisse ansehen, können Sie nicht sagen, in welche Perspektive sie eingeteilt wurden. Irgendwie scheint die Klassifikation Nummer 1 eine Sammlung europäischer Länder zu sein, aber in offiziellen Namen wie "Republic_of_Austria" ist sie zur Klassifikation Nummer 0 geworden. "United_States_of_America" und "United_States" sind ebenfalls verschiedene Kategorien. Problem 96 Die Länderextraktion war möglicherweise nicht gut ...
Das ist alles für den 98. Schlag. Wenn Sie Fehler haben, würde ich mich freuen, wenn Sie darauf hinweisen könnten.
Recommended Posts