머신러닝

[머신러닝] Scaler의 inverse_transform, RandomForest

eyoo 2022. 5. 10. 17:57

자동차 소비자들의 데이터를 토대로 자동차 구매 가격을 예측하는 인공지능을 만들어보자

 

df= 

# 이 중에서 성별부터 자본까지만 데이터로 활용하자.

 

전처리과정:

 

df.isna().sum()   # NaN없음

X = df.iloc[:,3:-1]
y = df['Car Purchase Amount']

from sklearn.preprocessing import MinMaxScaler
scaler_X = MinMaxScaler()
scaler_y = MinMaxScaler()
X = scaler_X.fit_transform(X)

y = y.values.reshape (500,1)   # y데이터 스케일링
y = scaler_y.fit_transform(y)

 

 

리니어 리그레션으로 모델링하고 학습한 후 평가진행:

 

in:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.25,random_state=50)

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train,y_train)

y_pred = regressor.predict(X_test)
error = (y_test-y_pred)
error
(error**2).mean()

out:

4.1530666637728536e-10

# MSE(Mean Squared Error)로 4.15가 나왔다.

 

 

특정한 소비자의 데이터를 입력하여 얼마정도의 차를 구매할수 있는지 예측하자.

 

성별 : 여자    나이 : 38    연봉 : 78,000    카드 빛 : 15,000    자산 : 480,000

 

데이터를 행렬로 나타내고 2차원 행렬로 변환한다.

 

new_data = np.array([0,38,78000,15000,480000])
new_data = new_data.reshape(1,5)

 

 

2차원으로 변환된 데이터를 X를 스케일링 했던 스케일러를 사용해 스케일링한 후, 인공지능을 실행시킨다.

 

new_data = scaler_X.transform(new_data)

new_pred = regressor.predict(new_data)

 

 

결과값이 담긴 new_pred 변수를 정상적으로 읽을수 있도록 y를 스케일링한 스케일러로 정상화시킨다.

 

in:

scaler_y.inverse_transform(new_pred)

out:

array([[47606.05302655]])

# 표본이 된 소비자는 자동차를 구매할때 약 47,606달러를 지출할것으로 예상된다.

 

 

RandomForest를 사용해서 더 낮은 MSE값을 가진 인공지능을 만들어보자.
# RandomForest는 디시전 트리의 성능을 개선한 모델이다.
 
from sklearn.ensemble import RandomForestRegressor
regressor = RandomForestRegressor(random_state=50)
 

 

이제 랜덤포레스트를 학습시킨다.

 

regressor.fit(X_train,y_train.ravel())

# ravel 함수로 1차원으로 만들수 있다.

 

 

성능을 평가해보자

 

in:

y_pred = regressor.predict(X_test)
((y_test.ravel() - y_pred)**2).mean()

out:

0.0019071093199875217