18
Июл
2016

Как исправить ошибку несовпадения размерности в регрессии – "ValueError: dimension mismatch"?

Я обучил гребневую регрессию с текстовыми данными. Но при прогнозировании появляется ошибка размерности.

Kод, который я использовал для обучения модели:

df['FullDescription'] = df['FullDescription'].str.lower()
df['FullDescription'] = df['FullDescription'].replace('[^a-zA-Z0-9]', ' ', regex = True)
df['LocationNormalized'].fillna('nd', inplace=True)
df['ContractTime'].fillna('nd', inplace=True)
vectorizer = TfidfVectorizer(input='content', encoding='utf-8', 
decode_error='strict', strip_accents=None, lowercase=True, 
preprocessor=None, tokenizer=None, analyzer='word', 
stop_words=None, min_df=6)
X_train = vectorizer.fit_transform(df['FullDescription'])
from scipy.sparse import hstack
from sklearn.feature_extraction import DictVectorizer
enc = DictVectorizer()
X_train_categ = enc.fit_transform(df[['LocationNormalized', 'ContractTime']].to_dict('records'))
# <60000x1766 sparse matrix of type '<class 'numpy.float64'>'
#with 120000 stored elements in Compressed Sparse Row format>


Z1 = hstack((X_train, X_train_categ))

# <60000x22510 sparse matrix of type '<class 'numpy.float64'>'
#   with 8475174 stored elements in COOrdinate format>

from sklearn.linear_model import Ridge
Y = df['SalaryNormalized']
clf = Ridge(alpha=1.0, random_state=241)
clf.fit(Z1, Y)

Загружая выборку для прогноза и просто используя всю выборку для прогноза, но получаю ошибку:

Location = r'C:\Users\803008\Desktop\salary-test-mini.csv'
dfT = pd.read_csv(Location)
X_prediction = clf.predict(dfT)
# ValueError: could not convert string to float: 'permanent'

Даже если я преобразую переменные по принципу описанному выше, то я получаю ошибку размерности, потому что моя матрица новых признаков для предсказания естественно меньше исходной:

dfT['FullDescription'] = dfT['FullDescription'].str.lower()
dfT['LocationNormalized'].fillna('nd', inplace=True)
dfT['ContractTime'].fillna('nd', inplace=True)
vectorizer = TfidfVectorizer(input='content', encoding='utf-8', 
decode_error='strict', strip_accents=None, lowercase=True, 
preprocessor=None, tokenizer=None, analyzer='word', stop_words=None)

X_test = vectorizer.fit_transform(dfT['FullDescription'])
enc2 = DictVectorizer()
X_test_categ = enc2.fit_transform(dfT[['LocationNormalized', 'ContractTime']].to_dict('records'))
Z2 = hstack((X_test, X_test_categ))
# <2x264 sparse matrix of type '<class 'numpy.float64'>'
#   with 304 stored elements in COOrdinate format>
X_prediction = clf.predict(Z2)
# ValueError: dimension mismatch
X_prediction = clf.predict(X_test)
# ValueError: dimension mismatch

Как исправить ошибку несовпадения размерности (ValueError: dimension mismatch)?

Источник: https://ru.stackoverflow.com/questions/546060/%D0%9A%D0%B0%D0%BA-%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D1%83-%D0%BD%D0%B5%D1%81%D0%BE%D0%B2%D0%BF%D0%B0%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F-%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D0%B2-%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B8-valueerror-dimensi

Тебе может это понравится...

Добавить комментарий