#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 и т.д.
Вместо этого вам нужно использовать регрессионные показатели для оценки вашей линейной регрессии.
Взгляните на доступные показатели регрессии здесь.