0
0 комментариев

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

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)?


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