Eine der nicht hierarchischen Clustering-Methoden ist die k-means-Methode (k-means-Methode). Die Beschreibung von "Kapitel 3 Informations- und Datenwissenschaft, zweite Hälfte des Lernens 16. Klassifizierung durch Clustering" im Lehrmaterial wird zitiert, weil es leicht zu verstehen ist.
Bei der k-means-Methode wird das Clustering gemäß dem folgenden Verfahren durchgeführt.
- Bestimmen Sie die Anzahl der Cluster, die im Voraus geteilt werden sollen, und bestimmen Sie zufällig die repräsentativen Punkte (Zentroide).
- Ermitteln Sie den Abstand zwischen den Daten und jedem repräsentativen Punkt und klassifizieren Sie ihn in den Cluster der nächstgelegenen repräsentativen Punkte.
- Berechnen Sie den Durchschnitt für jeden Cluster und verwenden Sie ihn als neuen repräsentativen Punkt.
- Wenn sich die Position des repräsentativen Punkts geändert hat, kehren Sie zu 2 zurück. Wenn sich nichts ändert, endet die Klassifizierung. Durch zufällige Bestimmung der repräsentativen Punkte gemäß 1) unterscheiden sich die Ergebnisse erheblich, was zu einer angemessenen Clusterbildung führt. Es darf nicht sein. Sie kann verbessert werden, indem die Analyse mehrmals wiederholt wird oder die Methode k-means ++ verwendet wird.
1 ') Wählen Sie zufällig einen repräsentativen Punkt aus den Daten aus und wählen Sie die verbleibenden repräsentativen Punkte mit einer Wahrscheinlichkeit aus, die proportional zum Quadrat der Entfernung von diesem Punkt ist.
In dem Abschnitt "Kapitel 3 Informations- und Datenwissenschaft, zweite Hälfte des Lernens 16. Klassifizierung durch Clustering", in dem die Erklärung zum Clustering von Lehrmaterialien geschrieben ist, wurde dies bereits anhand des Implementierungsbeispiels von Python erläutert. Dieses Mal wird in "Kapitel 5 Erforschung der Problemerkennung / -lösung unter Verwendung von Informations- und Informationstechnologie, Aktivitätsbeispiel 3. Verwendung von Informationstechnologie zur Nutzung von Daten" ein in R geschriebenes Implementierungsbeispiel in Python verwendet. Durch das Ersetzen möchte ich die Datenanalyse durch Clustering mit der k-means-Methode bestätigen.
[Informationsabteilung der High School "Information II" Lehrmaterialien für Lehrer (Hauptband): Ministerium für Bildung, Kultur, Sport, Wissenschaft und Technologie](https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/mext_00742.html "Informationsabteilung der High School Unterrichtsmaterialien "Information II" für die Lehrerausbildung (Hauptteil): Ministerium für Bildung, Kultur, Sport, Wissenschaft und Technologie ") Kapitel 5 Erforschung der Problemerkennung und -lösung unter Verwendung von Information und Informationstechnologie, Ende des Buches (PDF: 4,1 MB)
ipython Colaboratory - Google Colab
Aktivitätsbeispiel 3 Nutzung der Informationstechnologie zur Nutzung von Daten
Dieses Mal verwenden die Unterrichtsmaterialien Japanisch zum Zeichnen von Grafiken. Daher muss im Voraus festgelegt werden, damit Japanisch im Diagrammplot (matplotlib) verwendet werden kann.
!apt-get -y install fonts-ipafont-gothic
!ls -ll /root/.cache/matplotlib/
:
-rw-r--r-- 1 root root 46443 Sep 18 20:45 fontList.json
-rw-r--r-- 1 root root 29337 Sep 18 20:25 fontlist-v310.json
drwxr-xr-x 2 root root 4096 Sep 18 20:25 tex.cache
Löschen Sie den alten Schriftcache fontlist-v310.json basierend auf den Informationen des Befehls ls.
#Löschen Sie den Cache.
!rm /root/.cache/matplotlib/fontlist-v310.json #Cache gelöscht werden
!ls -ll /root/.cache/matplotlib/
#Löschen Sie den Cache.
!rm /root/.cache/matplotlib/fontlist-v310.json #Cache gelöscht werden
!ls -ll /root/.cache/matplotlib/
Starten Sie jetzt die Laufzeit von Google Colab. Als nächstes setzen Sie matplotlib auf Japanisch.
import matplotlib
#Japanische Anzeige
matplotlib.rcParams['font.family'] = "IPAGothic"
Laden Sie die folgenden Excel-Daten als "Umfrage zur tatsächlichen Situation der Computerisierung der Schulbildung" herunter.
["Aktuelle Bedingungen für" Computerinstallationsstatus "und" Internetverbindungsstatus "nach Präfektur (Gymnasium)"](https://www.e-stat.go.jp/stat-search/files?page=1&query= % E5% AD% A6% E6% A0% A1% E3% 81% AB% E3% 81% 8A% E3% 81% 91% E3% 82% 8B% E6% 95% 99% E8% 82% B2% E3 % 81% AE% E6% 83% 85% E5% A0% B1% E5% 8C% 96% E3% 81% AE% E5% AE% 9F% E6% 85% 8B% E7% AD% 89% E3% 81 % AB% E9% 96% A2% E3% 81% 99% E3% 82% 8B% E8% AA% BF% E6% 9F% BB & layout = Datensatz & stat_infid = 000031898768 & metadata = 1 & data = 1 "Nach Präfektur" Computerinstallationsstatus "Und die aktuelle Situation des" Internetverbindungsstatus "(Gymnasium)" ")
Führen Sie wie bei den Unterrichtsmaterialien eine Datenbereinigung in Excel durch, bevor Sie zuerst mit Python analysieren. Die Daten, die organisiert und geformt wurden, sind wie folgt.
Die durchgeführte Verarbeitung ist wie folgt.
Basierend auf diesen werden die Daten gelesen.
import pandas as pd
from IPython.display import display
pc = pd.read_csv('/content/pc_sjis.csv', encoding='shift_jis')
display(pc.head())
Die Unterrichtsmaterialien sind wie folgt.
In den Unterrichtsmaterialien scheint es einen Fehler zu geben, dass die Gesamtzahl der Lern-PCs liest, wo die Gesamtzahl der Lern-PCs gelesen werden sollte.
Um zu verstehen, welche Trends gelesen werden können, zeigen wir zunächst die Streudiagrammmatrix an. Dieses Mal werde ich das Seaborn-Modul verwenden.
import seaborn as sns
pg = sns.pairplot(pc)
print(type(pg))
Aus den Unterrichtsmaterialien
Diejenigen, deren lineare Tendenz deutlich sichtbar ist, wie die Anzahl der Schüler und die Anzahl der Klassenzimmer, unterliegen dem Korrelationskoeffizienten und der einfachen Regressionsanalyse, die in "Information I" gelernt wurden. Dieses Mal werden wir uns nicht mit der linearen Tendenz befassen. Betrachten wir also wlan (WLAN) und spp (Anzahl der Schüler pro PC).
Da dies der Fall ist, nehmen Sie die Werte von wlan (WLAN) und spp (Anzahl der Schüler pro PC) heraus und skalieren Sie.
Insbesondere haben wir standardisiert.
from sklearn.preprocessing import StandardScaler
#Wertextraktion(wlan spp)
pc_ws = pc[['wlan', 'spp']]
#Standardisierung(Verwendung von Standard Scaler)
std_sc = StandardScaler()
std_sc.fit(pc_ws)
pcs = std_sc.transform(pc_ws)
pcs_df = pd.DataFrame(pcs, columns = pc_ws.columns)
display(pcs_df.head())
Da die Arten der behandelten Daten unterschiedlich sind, standardisieren wir sie wie Lehrbücher. Für die Standardisierung sind frühere Artikel hilfreich. https://qiita.com/ereyester/items/b78b22a76a8f50006880
Erstellen und klassifizieren Sie als Nächstes das Modell.
from sklearn.cluster import KMeans
#Modell erstellen
km = KMeans(init='random', n_clusters=2 , random_state=0)
#Prognose
pc_cluster = km.fit_predict(pcs_df)
cluster_df = pd.DataFrame(pc_cluster, columns=['cluster'])
#Wertextraktion(pref wlan spp cluster)
pcs_cluster_df = pd.concat([pc[['pref', 'wlan', 'spp']], cluster_df], axis=1)
display(pcs_cluster_df.head())
Ich möchte das Ergebnis mit einem Streudiagramm bestätigen.
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
_, ax = plt.subplots(figsize=(5, 5), dpi=200)
sns.scatterplot(data=pcs_cluster_df, x="wlan", y="spp", hue="cluster", ax=ax)
for k, v in pcs_cluster_df.iterrows():
ax.annotate(v['pref'],xy=(v['wlan'],v['spp']),size=5)
plt.show()
Insgesamt scheint das WLAN (wlan) anhand der Informationen klassifiziert zu sein. Auch die Präfekturen Chiba und Saga scheinen außerhalb des Zentrums der Gruppe zu liegen.
Als nächstes zeichnen wir das Diagramm der Anzahl der Schüler und der Anzahl der Lern-PCs, für die eine eindeutige positive Korrelation gelesen werden kann, die im vorherigen Cluster farbcodiert ist.
#Wertextraktion(pref student pc cluster)
pcs_cluster2_df = pd.concat([pc[['pref', 'student', 'pc']], cluster_df], axis=1)
_, ax2 = plt.subplots(figsize=(5, 5), dpi=200)
sns.scatterplot(data=pcs_cluster2_df, x="student", y="pc", hue="cluster", ax=ax2)
for k, v in pcs_cluster2_df.iterrows():
ax2.annotate(v['pref'],xy=(v['student'],v['pc']),size=5)
plt.show()
Wenn das Verhältnis von PCs (Gesamtzahl der PCs für Lernende) zu Schülern (Anzahl der Schüler) groß ist, weist die Gruppe tendenziell eine hohe Wartungsrate von wlan (WLAN-Wartungsrate von normalen Klassenzimmern) auf, andernfalls wlan (normale Klassenräume). Es scheint, dass die Gruppe tendenziell eine niedrige Wartungsrate aufweist (WLAN-Wartungsrate). In der Präfektur Saga ist das Verhältnis von PCs (Gesamtzahl der Lerner-PCs) zu Studenten (Anzahl der Studenten) sehr groß, während in der Präfektur Chiba das Verhältnis von PCs (Gesamtzahl der Lernenden-PCs) zu Studenten (Anzahl der Studenten) sehr gering ist. Sie können die Eigenschaften von sehen.
https://gist.github.com/ereyester/ce9370e3022f05f4d7548a8ccaed33cc
Recommended Posts