TypeError : __init __ ()에 예기치 않은 키워드 인수 'categorical_features'가 있습니다. One Hot Encoder

Nov 20 2020

나는 Kaggle에서 얻은 위의 코드를 해결하려고 시도하고 있지만 실행하려고 시도했는데 다음 오류가 발생합니다.

return f (** kwargs) TypeError : init ()에 예기치 않은 키워드 인수 'categorical_features'가 있습니다.

다음은 전체 코드입니다.

data = pd.read_csv('auto-mpg.csv',sep = ',')
print(data.columns);
print(data.isnull().sum())

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

print('O maior MPG é ',data.mpg.max(),'milhoes por galao')
print('O menor MPG é',data.mpg.min(),'milhoes por galao')

f,ax = plt.subplots(1,2,figsize=(12,6))
sns.boxplot(data.mpg,ax=ax[0])
sns.distplot(data.mpg,ax=ax[1])

print("Skewness: ",data['mpg'].skew())
print("Kurtosis: ",data['mpg'].kurtosis())

corr = data.corr()
print(corr)

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

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


onehot = OneHotEncoder(categorical_features = x)
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('Accuracy of the random forest model:',round(r2_score(ytest,ypred_rfr)*100,2),'%')

그렇다면이 오류를 어떻게 처리 할 수 ​​있습니까?

답변

StupidWolf Nov 20 2020 at 15:13

이 코드에서 모든 열을 onehot 인코딩하는 것이 합리적 일지 잘 모르겠습니다. 숫자를 포함합니다.

목표가 열 car name을 범주 형 및 하나의 핫 인코딩 으로 변환하는 것이라고 가정 해 보겠습니다 .

import pandas as pd
from scipy.sparse import csr_matrix
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
from sklearn.ensemble import RandomForestRegressor

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

Index(['mpg', 'cylinders', 'displacement', 'horsepower', 'weight',
       'acceleration', 'model year', 'origin', 'car name'],
      dtype='object')

@ Jacky1205가 다른 답변에서 지적했듯이이 기능은 더 이상 사용되지 않습니다. 그리고 .NET Framework를 사용하려면 배열에 보관하는 것보다 data.frames를 사용하는 것이 좋습니다 ColumnTransformer. 예를 들면 :

from sklearn.compose import ColumnTransformer

ct = ColumnTransformer([
    ('one hot', OneHotEncoder(), ["car name"])], remainder="passthrough")
x = ct.fit_transform(data.iloc[:,1:])

또한 배열 수준에서 작업 할 수 있으며 지저분해질 수 있으며이 경우 데이터가 크지 않기 때문에 데이터를 조밀 한 행렬로 유지할 수 있습니다.

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

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

onehot = OneHotEncoder(sparse=False)
x = np.concatenate([x[:,:7],onehot.fit_transform(x[:,7].reshape(-1,1))],axis=1)
Jacky1205 Nov 20 2020 at 08:31

버전 0.20부터 사용되지 않음 : categorical_features 키워드는 버전 0.20에서 사용되지 않으며 0.22에서 제거됩니다. 대신 ColumnTransformer 를 사용할 수 있습니다 .

자세한 내용은 Scikit-learn 0.20 : sklearn.preprocessing.OneHotEncoder 를 참조하십시오.

그리고이 스택 오버플로 질문 : 54,345,667 로 재 작성하는 방법을 보여 ColumnTransformer

from sklearn.compose import ColumnTransformer

ct = ColumnTransformer([
    ('<Name>', OneHotEncoder(), x)], remainder="passthrough")
ct.fit_transform(x)