59729


学習済みCNNの評価に使用したテストデータを用いて実際にクラスタリングした結果を取得したいです。

Kerasを使ってクラスタリングを行うネットワークの構築を行っています。  
学習および評価に使用する画像を次のように取得しました

[code]

    target_dir = "TargetDir"
    data_df = pd.read_csv(target_dir+'data_sheet.csv')
    file_list = list(data_df['file'])    #画像ファイルのファイル名
    class_list = list(data_df['class'])  #クラス番号
    
    image_size = 64
    
    X=[]
    Y=[]
    
    for index,file in enumerate(file_list):
        image = Image.open(target_dir+file)
        image = image.resize((image_size,image_size))
        image = ImageOps.grayscale(image)
        image = np.asarray(image)
        X.append(image)
        Y.append(class_list[index])
    
    X=np.array(X)
    Y=np.array(Y)
    
    X=X.astype('float32')
    X/=255.0
    Y-=1
    Y=np_utils.to_categorical(Y,3)
    
    X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.20)
    
[/code]

これでネットワークの学習を行い、`model.evaluate` メソッドで評価を行いました。

この時、`X_test`
に含まれているデータを対象として実際にクラスタリングした結果を、画像ファイル名とクラスタリング結果の対応表として取得するにはどのようにすればよろしいでしょうか？

使用しているKerasは2.2.4 Pythonは3.6 となっております。


CC BY-SA 4.0
2019-01-22T02:00:28.077
52187
2019-10-15T23:13:25.167
2019-01-31T02:25:53.007
19500
19500
question
python python3 numpy keras scikit-learn
Kerasを使った学習済みモデルで実際にテスト用データを用いてクラスタリングをしたい


一般的に、クラスタリングとはkmeansのような教師なし学習での分類を意味します。教師あり学習の場合は、単に分類(classification)と呼びます。

さて、`train_test_split`は複数の変数を入力することができ、3つの変数でも動作します。

結論としては、以下のようなコードになります:

[code]

    X_train, X_test, Y_train, Y_test, files_train, files_test = train_test_split(X, Y, file_list, test_size=0.20)
    Y_pred = model.predict_classes(X_test)
    
    df = pd.DataFrame([{"file": f, "class": c} for f, c in zip(files_test, Y_pred)])
    df.to_csv("result.csv", index=False)
    
[/code]


CC BY-SA 4.0
2019-10-15T23:13:25.167
59729
2019-10-15T23:13:25.167
52187
answer