« 映画「ルックバック」を遅ればせながら観てきた。よかった…原作を読んだ時も衝撃を受けたが、それをさらに膨らませて2人の感情の動きや風景、声・しゃべり方、音楽どれもよくて泣ける…もらった特典はカバーでした。 | トップページ | 高周波・RFニュース 2024年9月10日 iPhone16が発表されたが、今年も日本モデルにミリ波対応はなし。iPhone16 Pro, Apple Watch, AirPodsの内部構造も。三つ折りスマホ、Huawei Mate XTの説明会も観ていた。 »

2024年9月 9日 (月)

高周波エンジニアのためのAI・機械学習入門(12)教師なし学習でバンドパスフィルタ(BPF)の中心周波数ずれのG/NG判定をPythonとtslearn(時系列ライブラリ)のTime series K-meansでクラスタリングとして行う。64クラスタにしても完全にG/NG判定はできなかった…

以前、教師あり学習でBPFの周波数ずれのG/NG判定をやってみた。

高周波エンジニアのためのAI・機械学習入門(9)教師あり学習でバンドパスフィルタ(BPF)の中心周波数ずれのG/NG判定をPythonとKeras 3.0を使って畳み込みニューラルネットワーク(CNN)で行う。精度が99%を超えるようになった。

その時はまずまずだったが、今回は教師なし学習でやってみる。データはこの時使ったものと同じ。

G_ngdnn01_20240902191401

使うのは前回も使ったtslearn。

 高周波エンジニアのためのAI・機械学習入門(10) Pythonの時系列用ライブラリtsleanを使ってRFフィルタ(LPF、BPF、HPF)のSパラメータ周波数特性がクラスタリング(教師なし学習)できるか見てみる。まずはTime Series K-means法で。

コードはこんな感じ。最後にG/NGが正しいかを出力している。


import numpy as np
import matplotlib.pyplot as plt
from tslearn.utils import to_time_series
from tslearn.clustering import TimeSeriesKMeans
from tslearn.preprocessing import TimeSeriesScalerMeanVariance

data_label = np.load("G_NG.npz")
data = data_label["data"]
s21dB = 10*np.log10(data[:, :, 3]**2 + data[:, :, 4]**2)
s21dB = to_time_series(s21dB)
n = 4
s21dB_scaled = TimeSeriesScalerMeanVariance().fit_transform(s21dB)
km = TimeSeriesKMeans(n_clusters=n, verbose=True, random_state=42)
pred = km.fit_predict(s21dB_scaled)
freq = np.linspace(0.1,20,s21dB.shape[1])
fig = plt.figure(figsize=(12,8))

for yi in range(n):
    plt.subplot(2, 2, yi + 1)
    for xx in s21dB[pred == yi]:
        plt.plot(freq, xx.ravel(), "b-", alpha=.1)
        plt.ylim(-60, 0)
        #plt.tick_params(labelsize=5)
        plt.xlabel("Frequency[GHz]")
        plt.ylabel("S21[dB]")
        plt.grid(True)
    plt.text(0.1, 0.25,'Cluster %d' % (yi + 1),transform=plt.gca().transAxes)
plt.tight_layout()
label = data_label["label"]
for i in range(n):
    num = label[pred == i].shape[0]
    num2 = int(label[pred == i].sum())
    if num == num2:
        print(f"Cluster{i+1} : クラスタに含まれる個数:{num} クラスタの中のGの個数:{num2}  G判定OK")
    elif num2 == 0:
        print(f"Cluster{i+1} : クラスタに含まれる個数:{num} クラスタの中のNGの個数:{num2}  NG判定OK")
    else:
        print(f"Cluster{i+1} : クラスタに含まれる個数:{num} クラスタの中のGの個数:{num2}  G/NG判定×")

ではまず4クラスタ。

Gng2

Cluster1 : クラスタに含まれる個数:2434 クラスタの中のGの個数:1929 G/NG判定×
Cluster2 : クラスタに含まれる個数:2537 クラスタの中のGの個数:2537 G判定OK
Cluster3 : クラスタに含まれる個数:2525 クラスタの中のGの個数:2525 G判定OK
Cluster4 : クラスタに含まれる個数:2504 クラスタの中のGの個数:2052 G/NG判定×

これはだめだな。ということでどんどんクラスタ数増やしていって64クラスタ。

 

Gng1

Cluster1 : クラスタに含まれる個数:132 クラスタの中のGの個数:132 G判定OK
Cluster2 : クラスタに含まれる個数:161 クラスタの中のGの個数:161 G判定OK
Cluster3 : クラスタに含まれる個数:203 クラスタの中のGの個数:203 G判定OK
Cluster4 : クラスタに含まれる個数:142 クラスタの中のGの個数:142 G判定OK
Cluster5 : クラスタに含まれる個数:157 クラスタの中のGの個数:157 G判定OK
Cluster6 : クラスタに含まれる個数:178 クラスタの中のGの個数:178 G判定OK
Cluster7 : クラスタに含まれる個数:156 クラスタの中のGの個数:156 G判定OK
Cluster8 : クラスタに含まれる個数:147 クラスタの中のGの個数:147 G判定OK
Cluster9 : クラスタに含まれる個数:141 クラスタの中のGの個数:141 G判定OK
Cluster10 : クラスタに含まれる個数:141 クラスタの中のNGの個数:0 NG判定OK
Cluster11 : クラスタに含まれる個数:175 クラスタの中のGの個数:175 G判定OK
Cluster12 : クラスタに含まれる個数:133 クラスタの中のGの個数:133 G判定OK
Cluster13 : クラスタに含まれる個数:139 クラスタの中のNGの個数:0 NG判定OK
Cluster14 : クラスタに含まれる個数:173 クラスタの中のGの個数:173 G判定OK
Cluster15 : クラスタに含まれる個数:159 クラスタの中のGの個数:159 G判定OK
Cluster16 : クラスタに含まれる個数:178 クラスタの中のGの個数:178 G判定OK
Cluster17 : クラスタに含まれる個数:176 クラスタの中のGの個数:176 G判定OK
Cluster18 : クラスタに含まれる個数:183 クラスタの中のGの個数:183 G判定OK
Cluster19 : クラスタに含まれる個数:130 クラスタの中のGの個数:130 G判定OK
Cluster20 : クラスタに含まれる個数:161 クラスタの中のGの個数:161 G判定OK
Cluster21 : クラスタに含まれる個数:162 クラスタの中のGの個数:162 G判定OK
Cluster22 : クラスタに含まれる個数:174 クラスタの中のGの個数:174 G判定OK
Cluster23 : クラスタに含まれる個数:206 クラスタの中のGの個数:206 G判定OK
Cluster24 : クラスタに含まれる個数:127 クラスタの中のGの個数:127 G判定OK
Cluster25 : クラスタに含まれる個数:136 クラスタの中のNGの個数:0 NG判定OK
Cluster26 : クラスタに含まれる個数:173 クラスタの中のGの個数:173 G判定OK
Cluster27 : クラスタに含まれる個数:136 クラスタの中のGの個数:136 G判定OK
Cluster28 : クラスタに含まれる個数:191 クラスタの中のGの個数:191 G判定OK
Cluster29 : クラスタに含まれる個数:168 クラスタの中のGの個数:168 G判定OK
Cluster30 : クラスタに含まれる個数:175 クラスタの中のGの個数:97 G/NG判定×
Cluster31 : クラスタに含まれる個数:160 クラスタの中のGの個数:160 G判定OK
Cluster32 : クラスタに含まれる個数:169 クラスタの中のGの個数:169 G判定OK
Cluster33 : クラスタに含まれる個数:159 クラスタの中のGの個数:159 G判定OK
Cluster34 : クラスタに含まれる個数:199 クラスタの中のGの個数:199 G判定OK
Cluster35 : クラスタに含まれる個数:167 クラスタの中のGの個数:167 G判定OK
Cluster36 : クラスタに含まれる個数:132 クラスタの中のGの個数:132 G判定OK
Cluster37 : クラスタに含まれる個数:158 クラスタの中のGの個数:158 G判定OK
Cluster38 : クラスタに含まれる個数:168 クラスタの中のGの個数:168 G判定OK
Cluster39 : クラスタに含まれる個数:182 クラスタの中のGの個数:182 G判定OK
Cluster40 : クラスタに含まれる個数:188 クラスタの中のGの個数:188 G判定OK
Cluster41 : クラスタに含まれる個数:151 クラスタの中のGの個数:151 G判定OK
Cluster42 : クラスタに含まれる個数:166 クラスタの中のGの個数:166 G判定OK
Cluster43 : クラスタに含まれる個数:145 クラスタの中のGの個数:145 G判定OK
Cluster44 : クラスタに含まれる個数:153 クラスタの中のGの個数:153 G判定OK
Cluster45 : クラスタに含まれる個数:137 クラスタの中のGの個数:137 G判定OK
Cluster46 : クラスタに含まれる個数:131 クラスタの中のGの個数:78 G/NG判定×
Cluster47 : クラスタに含まれる個数:151 クラスタの中のGの個数:151 G判定OK
Cluster48 : クラスタに含まれる個数:167 クラスタの中のGの個数:167 G判定OK
Cluster49 : クラスタに含まれる個数:183 クラスタの中のGの個数:183 G判定OK
Cluster50 : クラスタに含まれる個数:131 クラスタの中のGの個数:131 G判定OK
Cluster51 : クラスタに含まれる個数:124 クラスタの中のNGの個数:0 NG判定OK
Cluster52 : クラスタに含まれる個数:158 クラスタの中のGの個数:158 G判定OK
Cluster53 : クラスタに含まれる個数:152 クラスタの中のGの個数:152 G判定OK
Cluster54 : クラスタに含まれる個数:164 クラスタの中のGの個数:164 G判定OK
Cluster55 : クラスタに含まれる個数:156 クラスタの中のGの個数:156 G判定OK
Cluster56 : クラスタに含まれる個数:157 クラスタの中のGの個数:157 G判定OK
Cluster57 : クラスタに含まれる個数:164 クラスタの中のNGの個数:0 NG判定OK
Cluster58 : クラスタに含まれる個数:115 クラスタの中のGの個数:115 G判定OK
Cluster59 : クラスタに含まれる個数:143 クラスタの中のGの個数:143 G判定OK
Cluster60 : クラスタに含まれる個数:147 クラスタの中のGの個数:147 G判定OK
Cluster61 : クラスタに含まれる個数:115 クラスタの中のGの個数:115 G判定OK
Cluster62 : クラスタに含まれる個数:131 クラスタの中のGの個数:131 G判定OK
Cluster63 : クラスタに含まれる個数:142 クラスタの中のGの個数:142 G判定OK
Cluster64 : クラスタに含まれる個数:122 クラスタの中のNGの個数:0 NG判定OK

 

これでもまだ間違っているクラスタがある…もうちょっと工夫しないとだめだな。

« 映画「ルックバック」を遅ればせながら観てきた。よかった…原作を読んだ時も衝撃を受けたが、それをさらに膨らませて2人の感情の動きや風景、声・しゃべり方、音楽どれもよくて泣ける…もらった特典はカバーでした。 | トップページ | 高周波・RFニュース 2024年9月10日 iPhone16が発表されたが、今年も日本モデルにミリ波対応はなし。iPhone16 Pro, Apple Watch, AirPodsの内部構造も。三つ折りスマホ、Huawei Mate XTの説明会も観ていた。 »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 映画「ルックバック」を遅ればせながら観てきた。よかった…原作を読んだ時も衝撃を受けたが、それをさらに膨らませて2人の感情の動きや風景、声・しゃべり方、音楽どれもよくて泣ける…もらった特典はカバーでした。 | トップページ | 高周波・RFニュース 2024年9月10日 iPhone16が発表されたが、今年も日本モデルにミリ波対応はなし。iPhone16 Pro, Apple Watch, AirPodsの内部構造も。三つ折りスマホ、Huawei Mate XTの説明会も観ていた。 »

最近の記事

2025年2月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28  

最近のコメント

無料ブログはココログ
フォト