4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[sklearn]ValueError: Unknown label type: 'unknown'の対処

Last updated at Posted at 2023-10-29

はじめに

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」と書かれていることから、ラベルの属性(型)が不適切であると推測できますね。
当時は気づけませんでしたが、冷静にエラーの文章をよく読めば簡単に解決できたかもしれません。。。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?