質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

722閲覧

クラスタリングのモデル(Kshape)を保存し、新たなデータで実行したらエラーが発生

S_A86g75

総合スコア5

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/03/23 00:39

編集2023/03/23 01:14

実現したいこと

telearnのKshapeを使って、ある時系列データをクラスタリングした後、ラベルデータを保存しました。
そのデータを用いて新しいデータをクラスタリングしたいです。

前提

データフレームはインデックスに品種番号、横軸に時系列データの値を取り品種毎のクラスタリングを実施しています。また正規化は既に実施しているデータフレーム(df_clustering)です。

--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-87-b96b8fa53535> in <module> 12 # 保存したモデルを使用して予測を行う 13 #kshape_loaded.fit(forcast_array) ---> 14 new_labels_ks = kshape_loaded.predict(forcast_array) 15 print(new_labels_ks) AttributeError: 'numpy.ndarray' object has no attribute 'predict'

該当のソースコード

python

1### 実行コード ### 2#K-shapeのインポート 3from tslearn.clustering import KShape 4 5# モデルの呼び出し 6with open('/content/KShape_model.pkl', 'rb') as f: 7 kshape_loaded = pickle.load(f) 8 9print(type(kshape_loaded)) # <class 'numpy.ndarray'> 10forcast_array = np.array(df_clustering.values) 11print(type(forcast_array)) # <class 'numpy.ndarray'> 12 13# 保存したモデルを使用して予測を行う 14#kshape_loaded.fit(forcast_array) 15new_labels_ks = kshape_loaded.predict(forcast_array) 16print(new_labels_ks) 17### 18 19 20### 参考情報(保存時コード) ### 21#K-shapeインストール 22from tslearn.clustering import KShape 23 24# cluster数 25n_clusters = 3 26#model 27ks = KShape(n_clusters=n_clusters, random_state=42) 28labels_ks = ks.fit_predict(df_clustering_ori) 29 30#保存 31with open('KShape_model.pkl', 'wb') as f: 32 pickle.dump(labels_ks, f) 33### 34

試したこと

・df_clusteringをnp.arrayしない
・predictでなくfit_predictを使ってみる
・とりあえずfitさせてから、predictしてみる
の3つを実施してみましたが、特にエラーは変わりませんでした。
ラベルデータがnumpy.ndarray型なので、ラベルデータを保存したことが悪かったのでしょうか。
もしくはラベルデータを保存した際には特殊な処理をかますのでしょうか。
保存時の処理が悪かった場合もご指摘お願いします。

補足情報(FW/ツールのバージョンなど)

Google Colaboratory

コードの方にも書きましたが、保存した際のコードをこちらにも追記します。

python

1 2#K-shapeインストール 3from tslearn.clustering import KShape 4 5# cluster数 6n_clusters = 3 7#model 8ks = KShape(n_clusters=n_clusters, random_state=42) 9labels_ks = ks.fit_predict(df_clustering_ori) 10 11#保存 12with open('KShape_model.pkl', 'wb') as f: 13 pickle.dump(labels_ks, f)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PondVillege

2023/03/23 01:06

モデルの保存をするコードの方を示してください. ラベルデータを保存するのではなく,モデルを保存しなければならないはずです.
S_A86g75

2023/03/23 01:16

コメントありがとうございます。 補足情報の追記をさせて頂きました。 確かにラベルデータの保存を実施しております。 モデルの保存ということで、このコードでいうとksに対して、fitさせたデータを保存すればよいのでしょうか。
PondVillege

2023/03/23 01:32

ksが予測器なので, ksを保存→該当のコードで読み出し→新しいデータをクラスタリング する必要があります.
S_A86g75

2023/03/23 11:51

無事エラーが解消されました、 ありがとうございます。
guest

回答1

0

自己解決

モデルを保存する際、ラベルではなく、予測器を保存した結果、エラーが解消されました。

python

1from tslearn.clustering import KShape 2 3# cluster数 4n_clusters = 3 5#model 6ks = KShape(n_clusters=n_clusters, random_state=42) 7labels_ks = ks.fit_predict(df_clustering_ori) 8 9#保存 10with open('KShape_model.pkl', 'wb') as f: 11 # labels_ks でなく、ksを保存 12 pickle.dump(ks, f)

投稿2023/03/23 11:58

S_A86g75

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問