머신러닝
[머신러닝] 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