Neue Schriftart | Alte Schrift | |
---|---|---|
Quelle | ①U+658E (542,000 Menschen) <fontcolor=red>Quelle |
②U+9F4B(86,800Personen) Quelle(①)Alte Schrift |
Eigentlich, SchreibenFehler |
③U+6589(323,000 Menschen) Quelle(①)のSchreibenFehler |
④U+9F4A(37,300Personen) AlteSchrift(②)のSchreibenFehler |
Schließlich möchte ich, dass ** "Sai" ** ((1) Quelle) ** repräsentativ (Mitte) ** aller Sai-Zeichen (4 Typen) ist.
from umap import UMAP
# Umap decomposition
decomp = UMAP(n_components=2,random_state=42)
# fit_transform umap(Saito 4 Zeichendaten)
embedding4 = decomp.fit_transform(all.T[[1,12,31,32]])
from sklearn.cluster import KMeans
#Clustering (1 Cluster)
clustering = KMeans(n_clusters=1,random_state=42,)
# fit_predict cluster
cl_y = clustering.fit_predict(embedding4)
# visualize (Die Implementierung wird später beschrieben)
showScatter(
embeddings = embedding4,
clusterlabels = cl_y,
centers = clustering.cluster_centers_,
imgs = all.T[[1,12,31,32]].reshape(-1,h,w)
)
In der Reihenfolge der Nähe vom Schwerpunkt | Brief | Entfernung vom Schwerpunkt | Memo |
---|---|---|---|
Platz 1 | 0.6281 | ②Quelle(alteSchriftart) | |
2. Platz | 0.6889 | ③Fehler(neueSchriftart) | |
3. Platz | 0.7339 | ①Quelle(neueSchriftart) | |
4. Platz | 0.8743 | ④Fehler(alteSchriftart) |
from umap import UMAP
# Umap decomposition
decomp = UMAP(n_components=2,random_state=42)
# fit_transform umap(Alle 33 Zeichendaten)
embeddings = decomp.fit_transform(all.T)
from sklearn.cluster import KMeans
# clustering(Anzahl der Cluster: 1)
clustering = KMeans(n_clusters=1, random_state=42)
# fit_predict cluster
cl_y = clustering.fit_predict(embeddings)
# visualize
showScatter(embeddings, cl_y, clustering.cluster_centers_)
In der Reihenfolge der Nähe vom Schwerpunkt | Brief | Entfernung vom Schwerpunkt | Memo |
---|---|---|---|
Platz 1 | 0.494 | ||
2. Platz | 0.787 | ||
3. Platz | 1.013 | ||
4. Platz | 1.014 |
from sklearn.cluster import KMeans
# clustering(Anzahl der Cluster: 4)
clustering = KMeans(n_clusters=4, random_state=42)
# fit_predict cluster
cl_y = clustering.fit_predict(embeddings)
# visualize
showScatter(embeddings, cl_y, clustering.cluster_centers_)
No | Cluster | Schwerpunkt | Andere Zeichen enthalten |
---|---|---|---|
1 | rot | ||
2 | Orange | ||
3 | Blau | ||
4 | Grün |
from sklearn.cluster import KMeans
# clustering(Anzahl der Cluster: 8)
clustering = KMeans(n_clusters=8, random_state=42)
# fit_predict cluster
cl_y = clustering.fit_predict(embeddings)
# visualize
showScatter(embeddings, cl_y, clustering.cluster_centers_)
No | Cluster | Clusterに含まれる字 |
---|---|---|
1 | Pfirsich | |
2 | rot | |
3 | Tee | |
4 | Asche | |
5 | Orange | |
6 | Blau | |
7 | lila | |
8 | Grün |
Elbow Chart
from yellowbrick.cluster import KElbowVisualizer
vis = KElbowVisualizer(
KMeans(random_state=42),
k=(1,34) #Anzahl der Cluster (Bereich auf der horizontalen Achse))
)
vis.fit(embeddings)
vis.show()
from yellowbrick.cluster import KElbowVisualizer
vis = KElbowVisualizer(
KMeans(random_state=42),
k=(4,19) #Anzahl der Cluster (Bereich auf der horizontalen Achse))
)
vis.fit(embeddings)
vis.show()
Silhouette Chart
from yellowbrick.cluster import silhouette_visualizer
fig = plt.figure(figsize=(15,25))
#Zeichnen Sie 4 bis 9 Cluster zusammen
for i in range(4,10):
ax = fig.add_subplot(4,2,i-1)
silhouette_visualizer(KMeans(i),embeddings)
dendrogram
from scipy.cluster.hierarchy import linkage, dendrogram
Z = linkage(
y = embeddings,
method = 'weighted',
metric = "euclidean",
)
R = dendrogram(
Z=Z,
color_threshold=1.2, #Passen Sie die Anzahl der Cluster mit diesem Schwellenwert an
show_contracted=False,
)
Anzahl der Cluster | Dendrogramm | Kommentar |
---|---|---|
4 | rotNur ein bisschen teuer | |
5 | Die Höhe ist gleichmäßig lilaIch mache mir Sorgen um ein paar Es fühlt sich ziemlich gut an |
|
8 | Die Höhe und Anzahl sind gleich, Ist es zu fein geteilt? |
from sklearn.cluster import KMeans
# clustering(Anzahl der Cluster: 5)
clustering = KMeans(n_clusters=5, random_state=42)
# fit_predict cluster
cl_y = clustering.fit_predict(embeddings)
# visualize
showScatter(embeddings, cl_y, clustering.cluster_centers_)
No | Cluster | Schwerpunkt | Andere Zeichen enthalten |
---|---|---|---|
1 | Blau | ||
2 | lila | ||
3 | Grün | ||
4 | rot | ||
5 | Orange |
No | Wie man wählt | Vertreter Saito |
---|---|---|
1 | Von 4 erkannten Kanji 1 ZeichenWenn Sie möchten, ist der Vertreter |
|
2 | Von allen 33 Kanji 1 ZeichenWenn du wählst |
|
3 | Von allen 33 Kanji 4 ZeichenWenn du wählst |
|
4 | Von allen 33 Kanji 8 CharaktereWenn du wählst |
|
5 | Alle 33 Kanji Wie viele ClusterSollte unterteilt werden in |
Über 5 ClusterSieht gut aus |
6 | Von allen 33 Kanji 5 ZeichenWenn du wählst |
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.lines as mlines
from matplotlib import offsetbox
from sklearn.preprocessing import MinMaxScaler
from PIL import Image
import matplotlib.patches as patches
rc = {
'font.family': ['sans-serif'],
'font.sans-serif': ['Open Sans', 'Arial Unicode MS'],
'font.size': 12,
'figure.figsize': (8, 6),
'grid.linewidth': 0.5,
'legend.fontsize': 10,
'legend.frameon': True,
'legend.framealpha': 0.6,
'legend.handletextpad': 0.2,
'lines.linewidth': 1,
'axes.facecolor': '#fafafa',
'axes.labelsize': 10,
'axes.titlesize': 14,
'axes.linewidth': 0.5,
'xtick.labelsize': 10,
'xtick.minor.visible': True,
'ytick.labelsize': 10,
'figure.titlesize': 14
}
sns.set('notebook', 'whitegrid', rc=rc)
def colorize(d, color, alpha=1.0):
rgb = np.dstack((d,d,d)) * color
return np.dstack((rgb, d * alpha)).astype(np.uint8)
colors = sns.color_palette('tab10')
def showScatter(
embeddings,
clusterlabels,
centers = [],
imgs = all.T.reshape(-1,h,w),
):
fig, ax = plt.subplots(figsize=(15,15))
#Skalierung vor dem Zeichnen des Streudiagramms
scaler = MinMaxScaler()
embeddings = scaler.fit_transform(embeddings)
source = zip(embeddings, imgs ,clusterlabels)
#Zeichnen Sie Kanji auf ein Streudiagramm
cnt = 0
for pos, d , i in source:
cnt = cnt + 1
img = colorize(d, colors[i], 0.5)
ab = offsetbox.AnnotationBbox(offsetbox.OffsetImage(img),0.03 + pos * 0.94,frameon=False)
ax.add_artist(ab)
#Zeichnen Sie konzentrische Kreise vom Schwerpunkt
if len(centers) != 0:
for c in scaler.transform(centers):
for r in np.arange(3,0,-1)*0.05:
circle = patches.Circle(
xy=(c[0], c[1]),
radius=r,
fc='#FFFFFF',
ec='black'
)
circle.set_alpha(0.3)
ax.add_patch(circle)
ax.scatter(c[0],c[1],s=300,marker="X")
#Achsenzeichnungsbereich
limit = [-0.1,1.1]
plt.xlim(limit)
plt.ylim(limit)
plt.show()
Recommended Posts