Tak więc, używam losowego lasu do tego zestawu danych: HTTPS: // Archiwum. ICS.UCI.EDU/ML/DATASETS/AUTO+MPG
. Ale kiedy próbuję coś przewidzieć, rzuca ten błąd:

ValueError: Liczba funkcji modelu musi być zgodna z wejściem. Model N_Features to 947 i wejście N_Features wynosi 15

To są moje pliki:

import joblib  # para salvar o modelo
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler  # Para Normalizar
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import r2_score

data = pd.read_csv('auto-mpg.csv',sep = ',')

data['horsepower'] = data['horsepower'].replace('?','100')

x = data.iloc[:,1:].values
y = data.iloc[:,0].values

lb = LabelEncoder()
x[:,7] = lb.fit_transform(x[:,7])

onehot = OneHotEncoder()
x = onehot.fit_transform(x).toarray()

xtrain,xtest,ytrain,ytest = train_test_split(x,y,test_size = 0.2,random_state = 0)

sc = StandardScaler()
x = sc.fit_transform(x)

rfr = RandomForestRegressor(n_estimators = 200,random_state = 0)
rfr.fit(xtrain,ytrain)

ypred_rfr = rfr.predict(xtest)
print('Acuracia:',round(r2_score(ytest,ypred_rfr)*100,2),'%')

joblib.dump(rfr,'randon-forest.model')

I tutaj jest błąd:

import joblib  # para salvar o modelo
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import OneHotEncoder

data = pd.read_csv('teste.csv',sep = ',')
print(data.columns);
logit = joblib.load('randon-forest.model')

onehot = OneHotEncoder()
data = onehot.fit_transform(data).toarray()

sc = StandardScaler()
data = sc.fit_transform(data)

# montar um vetor de dados
dados_vet = pd.DataFrame(data)
print(data)
# classificar esse vetor com o logit_bank
result_predict = logit.predict(dados_vet)

print('Logit Bank')
print(result_predict)

1
user14671619 21 listopad 2020, 01:13

1 odpowiedź

Najlepsza odpowiedź

Tl; dr:
Dane używane do przewidywania muszą mieć taką samą liczbę funkcji, jak dane, które zostały wykorzystane do szkolenia modelu.

Bardziej szczegółowa odpowiedź:
Trenujesz model na auto-mpg.csv, który chyba ma 947 funkcji (kolumny) w IT (+1 kolumna jako wartość tagowania). Jednak dane w teste.csv, które nie wiem, co to jest, prawdopodobnie ma w nim tylko 15 funkcji, więc nie można przewidzieć 15 funkcji danych za pomocą modelu, który został przeszkolony na inną liczbę funkcji.

Prosty przykład: Powiedzmy, że masz model, który przewiduje cenę domu, biorąc pod uwagę rok, który został zbudowany, a liczba pomieszczeń przy użyciu tego wzoru:

price = number_of_rooms * 5 + (year-2000) * 20

Co próbujesz zrobić ze swoim kodem, jest odpowiednikiem dostarczania tego przykładowego modelu tylko liczby pokoi. Model musi również "znać".

0
itaishz 20 listopad 2020, 22:33