본문 바로가기
Python/MachineLearning

Regression 3) New 데이터의 예측값은?

by 하니__ 2024. 4. 13.

2024.04.13 - [MachineLearning] - Regression 2) Error, MSE, RMSE

 

 

 

새로운 데이터가 들어왔을때의 예측값

 

데이터의 내용은 다르지만

앞부분은 넘어가고 본편으로 넘어가겠다

 

 

 운영비는 15만 달러, 마케팅비용 40만 달러, 연구개발비 13만 달러 ,회사위치는 florida 에 있다면 예상 수익은?」

 

이 데이터의 콜럼 순서는

연구개발비, 운영비, 마케팅비용, 회사위치

였지만

 

원 핫 인코딩으로 인해 회사지역 맨 앞으로 오게되며

회사지역 또한 ['California', 'Florida', 'New York'] 로

 

0, 1 , 0 이 되고 그렇기에 이렇게 입력이 되게 된다

 

 

 

 

new_data = np.array([ 0, 1 , 0 , 130000, 150000, 400000 ])
new_data = new_data.reshape(1,6)

 

예측하기전에 1차원배열은 사용할수 없기때문에 2차원배열로 만들어준뒤

 

 

regressor.predict(new_data)
array([165102.43212675])

 

이렇게 예측이 가능하다

 

 

 

 

그렇다면 두가지의 데이터는?

 

 

운영비는 15만 달러, 마케팅비용 40만 달러, 연구개발비 13만 달러, 회사위치는 florida 에 있다면 예상 수익은?
운영비는 11만 달러, 마케팅비용 60만 달러, 연구개발비 15만 달러, 회사위치는 Newyork 에 있다면 예상 수익은?

 

 

 
new = np.array(([ 0, 1 , 0 , 130000, 150000, 400000 ] , [ 0, 0 , 1 , 150000, 110000, 600000 ]))
regressor.predict(new)
array([165102.43212675, 184941.14856592])

 

물론 이렇게 바로 입력해서 넣어주면 바로 나온다

 

하지만

 

지역이 몇백개가 되거나

데이터가 몇백개가 되면

 

지역을 일일이 바꾸는 일 조차 버거울 것이다

 

 

 

 

그러면 그냥 데이터들을 그대로 데이터프레임으로 만들어

지역을 그대로 입력하자

 

 
 
data = {'R&D Spend':[130000, 150000] ,'Administration' : [150000,110000],'Marketing Spend': [400000,600000],'State':['Florida', 'New York']  }

 

new_data = pd.DataFrame(data=data)
new_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 4 columns):
 #   Column           Non-Null Count  Dtype 
---  ------           --------------  ----- 
 0   R&D Spend        2 non-null      int64 
 1   Administration   2 non-null      int64 
 2   Marketing Spend  2 non-null      int64 
 3   State            2 non-null      object
dtypes: int64(3), object(1)
memory usage: 196.0+ bytes

 

 

확실히 지역은 오브젝트, 문자열이다

 

하지만

 

데이터프로세싱 준비단계에서

콜럼트랜스폼에서

 

fit으로 학습을 시켰던것이 기억 나는가?

이번엔 fit이 아닌 트랜스폼으로 바로 넣어주자

 

 

 

ct.transform(new_data)
array([[0.0e+00, 1.0e+00, 0.0e+00, 1.3e+05, 1.5e+05, 4.0e+05],
       [0.0e+00, 0.0e+00, 1.0e+00, 1.5e+05, 1.1e+05, 6.0e+05]])
 
ct는 fit으로 이미 학습이 되어있기때문에
지역3개는 그대로 0 1 0, 0 0 1을 기억하고 있다
 
물론 다른 지역이 추가된다면 다시 학습을 시켜야하겠지만
 
그리고
 
new_data = [ 8, 301 , 133, 2900, 10.7, 81, 2 ]
 
new_data = np.array(new_data).reshape(1, 7)
 
new_data
 
array([[8.00e+00, 3.01e+02, 1.33e+02, 2.90e+03, 1.07e+01, 8.10e+01,
        2.00e+00]])
 
new_data = ct.transform(new_data)
C:\ProgramData\anaconda3\Lib\site-packages\sklearn\base.py:439: UserWarning: X does not have valid feature names, but OneHotEncoder was fitted with feature names
  warnings.warn(
 
넘파이 어레이 상태로 문자열을 변환하는것도 가능하다
그리고 그렇게 하면 column이 지정되지 않았다면서 에러가 뜨는데
확실한거냐면서 나오긴 하는데
 
 
new_data
 
array([[0.00e+00, 1.00e+00, 0.00e+00, 8.00e+00, 3.01e+02, 1.33e+02,
        2.90e+03, 1.07e+01, 8.10e+01]])
 
 
문제없이 변환해주니 순서만 잘 맞춘다면 나오는것은 같다
 
 
 
 
 
 
 
 
regressor.predict(new_data)
array([165102.43212675, 184941.14856592])

 

 

그래서 새로운 데이터도 문자열을 손수 작업해줄 필요 없이

입력하면 바로바로 예측이 가능하다

 

 

 

 

 

 

 

 

Regression 4) 인공지능 저장 및 사용

앞서 만든 것들을 실제로 사용하려면 2개의 파일이 필요하다 바로 regressor, ct 인데 하나는 예측하는 것이었고 하나는 데이터를 입력할때 문자열(지역)을 변환시켜주는 것이었다 그래서 활용을

hani08.tistory.com