はじめに
Qiita初投稿。
環境はGoogle Colaboratory。
サポートベクトルマシン(SVM)を用いた機械学習を行おうとした。
主要なコードを抜粋して、下記に示す。
エラー時の状況
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris
trainDf = pd.read_csv('cancer_train.csv')
trainDf.loc[trainDf['diagnosis']=='M', 'diagnosis'] = 1
trainDf.loc[trainDf['diagnosis']=='B', 'diagnosis'] = 0
x = trainDf.drop('diagnosis', axis=1).values
t = trainDf['diagnosis'].values
# 学習データとテストデータに分割
from sklearn.model_selection import train_test_split
x_train, x_test, t_train, t_test = train_test_split(x, t, test_size=0.3, random_state=0)
# モデルの定義
from sklearn.svm import SVC
svc = SVC()
# モデルの学習
svc.fit(x_train, t_train)
上記コードのsvc.fit(x_train, t_train)
のところで下記のようなエラーが出ていた。
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-153-1a4df9ebbf66> in <cell line: 6>()
4
5 # モデルの学習
----> 6 svc.fit(x_train, t_train)
2 frames
/usr/local/lib/python3.10/dist-packages/sklearn/utils/multiclass.py in check_classification_targets(y)
216 "multilabel-sequences",
217 ]:
--> 218 raise ValueError("Unknown label type: %r" % y_type)
219
220
ValueError: Unknown label type: 'unknown'
原因
少し調べると、Unknown label type:
のエラーはfitの際のyに問題があることがわかった。
参考サイト:機械学習 モデル エラー Unknown label type: 'continuous-multioutput'
下記のコードで、diagnosis(診断)列の値が'M'であれば1、'B'であれば0と変換しているのだが、ここの処理が原因でエラーが発生していた。
- 対処前
trainDf = pd.read_csv('cancer_train.csv')
trainDf.loc[trainDf['diagnosis']=='M', 'diagnosis'] = 1
trainDf.loc[trainDf['diagnosis']=='B', 'diagnosis'] = 0
- 対処後
trainDf = pd.read_csv('cancer_train.csv')
trainDf.loc[trainDf['diagnosis']=='M', 'diagnosis'] = '1'
trainDf.loc[trainDf['diagnosis']=='B', 'diagnosis'] = '0'
diagnosis列の7割をt_trainに割り当てているので、diagnosis列の要素の型を整数型からstr型に変更することでエラーが解消された。
fitにラベルとして与えた配列の要素が整数型だったのが今回のエラーの原因だと考えている。
まとめ
今回のエラーに対して、対処法を調べたが見つけられなかったので私の対処法をまとめた。
対処法が見つからないということは、このエラーで頭を抱えている人が少ない、もしくはいないのだろうか。
この記事をみて、誰かの助けになることを願う。
2024/03/23 以下のコメント追記
いいねありがとうございます。この記事しか投稿していないため、初めていいねをいただけました。とてもうれしいです!
少し記事を見返しましたが、エラーの文章に「label type」と書かれていることから、ラベルの属性(型)が不適切であると推測できますね。
当時は気づけませんでしたが、冷静にエラーの文章をよく読めば簡単に解決できたかもしれません。。。