sklearn train_test_split — Ошибка значения: найдены входные переменные с несогласованным количеством выборок: [2552, 1] /Линейная регрессия

#scikit-learn

#scikit-learn

Вопрос:

Мне нужна помощь в изменении моего ввода, чтобы он соответствовал моему выводу.

Я хотел создать модель, которая векторизирует и классифицирует информацию ‘All information’, чтобы значение ‘FALL’ можно было разделить на 0 и 1. Тем не менее, я продолжаю получать ошибку [Ошибка значения: найдены входные переменные с несогласованным количеством выборок: [2552, 1]]. ‘Shape’ выглядит нормально, но я не знаю, как это исправить.

 ## Linear Regression

import pandas as pd
import numpy as np
from tqdm import tqdm
#instance->fit->predict

from sklearn.linear_model import LinearRegression

model=LinearRegression(fit_intercept=True)

data=pd.read_csv("Fall_test_0826.csv", encoding='cp949', header=0)
data.head(2)


X=data.drop(["fall"], axis=1)

y= data.fall


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


from sklearn.feature_extraction.text import TfidfVectorizer

tfidf_vect=TfidfVectorizer()
tfidf_vect.fit(X_train)#단어사전 만듬

X_train_tfidf_vect = tfidf_vect.fit_transform(X_train['All information']).toarray()
X_test_tfidf_vect = tfidf_vect.transform(X_test)

lr_clf=LinearRegression()
lr_clf.fit(X_train_tfidf_vect, y_train)
pred = lr_clf.predict(X_test_tfidf_vect)


from sklearn.metrics import accuracy_score

print('Logisitic Regression _ {0:.3f}'.format(accuracy_score(y_test, pred)))
  

Ошибка:

 ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-85-bec6ead862c8> in <module>
----> 1 print('{0:.3f}'.format(accuracy_score(y_test, pred)))

~anaconda3libsite-packagessklearnutilsvalidation.py in inner_f(*args, **kwargs)
     71                           FutureWarning)
     72         kwargs.update({k: arg for k, arg in zip(sig.parameters, args)})
---> 73         return f(**kwargs)
     74     return inner_f
     75 

~anaconda3libsite-packagessklearnmetrics_classification.py in accuracy_score(y_true, y_pred, normalize, sample_weight)
    185 
    186     # Compute accuracy for each possible representation
--> 187     y_type, y_true, y_pred = _check_targets(y_true, y_pred)
    188     check_consistent_length(y_true, y_pred, sample_weight)
    189     if y_type.startswith('multilabel'):

~anaconda3libsite-packagessklearnmetrics_classification.py in _check_targets(y_true, y_pred)
     79     y_pred : array or indicator matrix
     80     """
---> 81     check_consistent_length(y_true, y_pred)
     82     type_true = type_of_target(y_true)
     83     type_pred = type_of_target(y_pred)

~anaconda3libsite-packagessklearnutilsvalidation.py in check_consistent_length(*arrays)
    254     uniques = np.unique(lengths)
    255     if len(uniques) > 1:
--> 256         raise ValueError("Found input variables with inconsistent numbers of"
    257                          " samples: %r" % [int(l) for l in lengths])
    258 

ValueError: Found input variables with inconsistent numbers of samples: [2552, 1]
  

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Примечание сбоку: вам нужно только fit здесь tfidf_vect.fit_transform(X_train['All information']).toarray() , а не fit_transform

2. Можете ли вы поделиться формами входных фреймов данных / массивов?

3. не могли бы вы отредактировать свой вопрос, чтобы показать используемый вами CSV или форму как y_test, так и pred?

4. @yatu Да, я вставил изображение. Вы бы проверили это?

5. @DiegoRueda, конечно. Я вставил изображение, связанное с вашим советом

Ответ №1:

Я думаю, вам нужно изменить строки в вашем коде из

 X_test_tfidf_vect = tfidf_vect.transform(X_test)
  

Для

 X_test_tfidf_vect = tfidf_vect.transform(X_test['All information'])
  

Но ваш подход неверен. Вы собираетесь использовать линейную регрессию, но пытаетесь использовать показатели классификации (accuracy_score) (ссылка)

Это должно привести к ошибке ValueError: Classification metrics can't handle a mix of binary and continuous targets

Так что это не сработает, потому что ваш массив pred будет содержать значения с плавающей точкой, например 0,5, но для accuracy_score вам нужны метки классов в виде целых чисел, например, 0,1,2 или 3 и т.д.

Вместо этого вам нужно использовать регрессионные показатели для оценки вашей линейной регрессии.

Взгляните на доступные показатели регрессии здесь.