본문 바로가기

Python-머신러닝

Multiple Linear Regression

반응형

ex) 각각의 피쳐를 분석하여, 어떤 신생 회사의 데이터가 있으면, 그 회사가 얼마의 수익을 낼 지 예측합니다. (투자를 해야 할지 말아야 할지)

 

- 신생회사 데이터를 가지고 있다. 

- 그 회사의 수익을 보고, 수익을 예측하는 거지, 수치니까. 리그레이션

 

X값이 많아지니

y = ax1 + bx2 + cx3 + dx4 + e 

- 컴퓨터는 먼저 랜덤으로 세팅한다. 

 

1. Nan 처리

df.isna().sum()

 

2. X와 y로 분리

X = df.loc[ : , 'R&D Spend' : 'State']
y = df['Profit']

 

3. 원핫 인코딩

- X의 컬럼 중에서 숫자가 아닌 컬럼이 있으니, 숫자로 바꿔준다.

 

X['State'].nunique()
sorted(X['State'].unique())
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer

ct = ColumnTransformer([('encoder',OneHotEncoder(),[3])],
                       remainder= 'passthrough')

 

4. 원핫 인코딩 학습

X = ct.fit_transform(X)

- fit의 의미는 그 컬럼이 몇개냐, 그 컬럼안에 있는 데이터 종류가 몇개냐.

- 확인해서 트랜스폼, 원핫 인코딩으로 바꿔라.

- 원핫 인코딩이 된 값이, ct.fit_transform(X) 결과값의 맨 왼쪽에 나옴. 그 오른쪽이 [0]의 컬럼부터 [1] 컬럼 등

 

-  이렇게 되면, 방정식이 바뀐다. 왜? X 가 바뀌었잖아. 

- 원래는 y = ax1 + bx2 + cx3 + dx4 + e 이였다면, (각 컬럼별로)

 

- 이제는 이렇게 바뀔듯 X 의 개수의 맞춰서 방정식을 세우니까. 

 y = ax1 + bx2 + cx3 + dx4 + ex5 + fx6 + gx7 + h

- 'California', 'Florida', 'New York', R&D Spend, Administration, Marketing Spend, State, Profit

 

5. X,y준비 끝났으니, 학습용과 테스트용으로 데이터 분리

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.2,random_state = 15)

 

6. 인공지능 모델링

- 깡통 인공지능 (비어있는 인공지능)을 만들어놓고, 얘보고 학습하라고 한다.

from sklearn.linear_model import LinearRegression

regressor = LinearRegression()
regressor.fit(X_train,y_train)

 

7. 성능측정

- MSE를 구해서 성능측정!

y_pred = regressor.predict(X_test)

error = y_test - y_pred
(error**2).mean()

 

8. 그래프로 표시

plt.plot(y_test.values)
plt.plot(y_pred)

plt.legend(['Real','Pred'])
plt.savefig('chart3.jpg')

plt.show()

 

ex) R&D 비용은 220,000만 달러, 운영비는 190,000달러, 마케팅비는 500,000달러 이고, 플로리다주에 있는 회사입니다.  회사의 수익을 예측하세요.

 

 

1. 넘파이 어레이로 새로운 데이터를 만든다.

new_data = np.array([220000,190000,500000,'Florida'])

 

2. 넘파이 어레이의 shape을 맞춰준다. (X_train과 동일하게)

new_data = new_data.reshape(1,4)

 

3. 레이블 인코딩이나 원핫 인코딩이 필요하면, 인공지능을 만들때, 사용한 인코더를 사용해야한다.

new_data = ct.transform(new_data)

- ct는 X의 정보를 가지고 있으니까

- dtype='<U32' 문자열이라는 뜻이다. 

 

 

4. 만약 데이터가 flost이 아니면, float으로 데이터를 바꿔준다.

new_data = new_data.astype(float)

 

 5. 예측 함수인, predict를 호출한다. 

regressor.predict(new_data)

 

new_data = np.array([220000,190000,500000,'Florida'])
X_train.shape
X_test.shape

new_data = new_data.reshape(1,4)
X_train.shape
new_data.shape

new_data = ct.transform(new_data)
new_data

X_train.shape
X_test.shape
new_data.shape

new_data = new_data.astype(float)
new_data 

regressor.predict(new_data)


반응형