SVM ValueError: вход содержит NaN, бесконечность или значение, слишком большое для dtype ('float64') - PullRequest
0 голосов
/ 10 февраля 2020

Пожалуйста, помогите мне в этом! Я не знаю, почему произошла эта ошибка, когда я пытаюсь ввести текст для определения классификации.

Это мой код для обучения данных. Как это исправить?

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(X_train)

from sklearn.feature_extraction.text import TfidfTransformer
tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)

from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
X_train_tfidf = vectorizer.fit_transform(X_train)

from sklearn.svm import LinearSVC
clf = LinearSVC()
clf.fit(X_train_tfidf,y_train)

if request.method == 'POST':
    message = request.form['message']
    data = [message]
    vect = vectorizer.transform(data).toarray()
    my_prediction = clf.predict(vect)

return render_template('result.html',prediction = my_prediction)`

1 Ответ

0 голосов
/ 10 февраля 2020
  1. Проверьте, есть ли в ваших данных пустые значения, используя your_data.isnull().any(). Если у вас есть нули, используйте your_data = your_data.dropna().
  2. Проверьте, содержит ли ваши данные inf, используя np.isfinite(your_data). Если есть значения inf, вы можете использовать your_data.replace([np.inf, -np.inf], np.nan), а затем your_data = your_data.dropna(), чтобы удалить их.

    Измените your_data на любое имя используемых вами фреймов данных, например, X, y или X_train_tfidf

Также отметьте этот ответ , а ответ, отмеченный как возможный, дублируется в комментариях к сообщению.


РЕДАКТИРОВАТЬ: Добавление образец по запросу. Делать это на X и Y как наиболее очевидная вещь.

from sklearn.model_selection import train_test_split
# Add these lines
X = X.replace([np.inf, -np.inf], np.nan)
y = y.replace([np.inf, -np.inf], np.nan)
X = X.dropna()
y = y.dropna()

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(X_train)

from sklearn.feature_extraction.text import TfidfTransformer
tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)

from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer()
X_train_tfidf = vectorizer.fit_transform(X_train)

from sklearn.svm import LinearSVC
clf = LinearSVC()
clf.fit(X_train_tfidf,y_train)

if request.method == 'POST':
    message = request.form['message']
    data = [message]
    vect = vectorizer.transform(data).toarray()
    my_prediction = clf.predict(vect)

return render_template('result.html',prediction = my_prediction)
...