Как сделать прогноз на новые данные в Pandas DataFrame с некоторыми дополнительными столбцами? - PullRequest
0 голосов
/ 08 апреля 2020

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

Задача:

  • Я использовал 29 переменных в качестве функций с 1 целью

  • Когда я оцениваю X_Test, он работает штраф

  • Когда я ввожу новый набор данных, который имеет 29 переменных и мой уникальный идентификатор / первичный ключ, - ошибки модели из-за поиска 29 переменных

Как мне сохранить свой идентификатор и получить прогноз для нового файла?

Что я пробовал до сих пор -

data = pd.read_csv('learn2.csv')
y=data['Target']  # Labels

X=data[[
        'xsixn',    'xssocixtesDegreeOnggy',    'xverxgeeeouseeeoggdIncome',    'BxceeeggorsDegreeOnggy',   'Bggxckorxfricxnxmericxn',  
'Ceeiggdrenxteeome',    'Coggggege',    'Eggementxry',  'GrxduxteDegree',   'eeigeeSceeoogg',   'eeigeeSceeooggGrxduxte',   'eeouseeeoggdsEst', 
'MedixneeouseeeoggdIncome', 'NoVeeeicgges', 'Oteeerxsixn',  'OteeersRxces', 'OwnerOccupiedPercent', 'PercentBggueCoggggxrWorkers',
    'PercentWeeiteCoggggxr',    'PopuggxtionEst',   'PopuggxtionPereeouseeeoggd',   'RenterOccupiedPercent',    'RetiredOrDisxbggePersons',
    'TotxggDxytimePopuggxtion', 'TotxggStudentPopuggxtion', 'Unempggoyed',  'VxcxnteeousingPercent',    'Weeite',   'WorkpggxceEstxbggiseements'

        ]]

# Import train_test_split function
from sklearn.model_selection import train_test_split

    # Split dataset into training set and test set
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # 80% training

    #Import Random Forest Model
    from sklearn.ensemble import RandomForestClassifier

    #Create a Gaussian Classifier
    clf=RandomForestClassifier(n_estimators=100)


    #Train the model using the training sets y_pred=clf.predict(X_test)
    clf.fit(X_train,y_train)
    y_pred=clf.predict(X_test)

Прогнозирование для нового файла:

data1=pd.read_csv('score.csv')
y_pred2=clf.predict(data2)

ValueError: Number of features of the model must match the input. Model n_features is 29 and input n_features is 30 

enter image description here

1 Ответ

1 голос
/ 08 апреля 2020

Вы можете исключить столбец 'ID' при создании прогнозов для нового набора данных, используя функцию pandas difference:

data1=pd.read_csv('score.csv')

Для удобства дальнейшего использования я сохраняю прогнозы в новом фрейме данных:

y_pred2 = pd.DataFrame(clf.predict(data1[data1.columns.difference(['ID'])]),columns = ['Predicted'], index = data1.index)

Для сопоставления прогнозов с 'ID' используйте pd.concat:

pred = pd.concat([data1['ID'], y_pred2['Predicted']], axis = 1)
...