web-dev-qa-db-ja.com

ValueError:クラスの数は1より大きくなければなりません(python)

fitx,yを渡すと、次のエラーが発生します。

トレースバック(最新の呼び出しが最後):

ファイル「C:/Classify/classifier.py」の95行目

train_avg、test_avg、cms = train_model(X、y、 "ceps"、plot = True)
train_modelのファイル「C:/Classify/classifier.py」、47行目

clf.fit(X_train、y_train)ファイル "C:\ Python27\lib\site-packages\sklearn\svm\base.py"、676行目、適合値を上げるValueError( "クラスの数はより大きい必要があります" ValueError :クラスの数は1より大きくなければなりません。

以下は私のコードです:

def train_model(X, Y, name, plot=False):
"""
    train_model(vector, vector, name[, plot=False])

    Trains and saves model to disk.
"""
labels = np.unique(Y)

cv = ShuffleSplit(n=len(X), n_iter=1, test_size=0.3, indices=True, random_state=0)

train_errors = []
test_errors = []

scores = []
pr_scores = defaultdict(list)
precisions, recalls, thresholds = defaultdict(list), defaultdict(list), defaultdict(list)

roc_scores = defaultdict(list)
tprs = defaultdict(list)
fprs = defaultdict(list)

clfs = []  # for the median

cms = []

for train, test in cv:
    X_train, y_train = X[train], Y[train]
    X_test, y_test = X[test], Y[test]

    clf = LogisticRegression()
    clf.fit(X_train, y_train)
    clfs.append(clf)
6
Vijayendra Shah

存在するトレーニングセットに一意のクラスラベルが1つしかない可能性があります。エラーメッセージが示すように、データセットには少なくとも2つの一意のクラスが必要です。たとえば、np.unique(y)を実行して、データセット内の一意のクラスラベルを確認できます。

17
user2489252

丁度。最後の列(ラベル)のタイプ(分類)は1つだけです。少なくとも2つ必要です。例えば;オフロードする必要があるかどうかをラベルで決定する場合は、ラベル列にオフロードと非オフロードまたは(0または1)を指定する必要があります。

1
MOBT