Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- list
- 반복문
- sklearn
- 분류 결과표
- Python
- function
- insert()
- pandas
- data
- 최솟값
- 최댓값
- Dictionary
- append()
- del
- 덴드로그램
- analizer
- wcss
- hierarchical_clustering
- matplotlib
- DataAccess
- count()
- elbow method
- DataFrame
- string
- len()
- IN
- Machine Learning
- nan
- numpy
- dendrogram
Archives
- Today
- Total
개발공부
Linear Regression 본문

경력과 연봉의 관계를 분석하여, 경력이 주어졌을때 연봉을 예측하려 한다.
데이터를 살펴보니, 아래와 같은 그래프로 나왔다고 가정했을 때,

아래 그림처럼, 해당 분포를 만족하는 직선을 찾으려 하는것이 목표다

직선을 찾기 위해서는, 우리가 잘 아는 직선의 방정식을 이용하여, 직선의 기울기와 y절편을 구하면 되는것이다.

여기에서 주의! x, y 가 우리에게 데이터셋으로 주어졌다. 따라서 우리는 b 를 찾아야 하는것이다.


즉, b0, b1 의 값을 찾아 가는 과정을 학습이라고 부른다.
그렇다면 학습이란 바로 error(오차)를 줄여 나가는 것이다.
아래는 오차를 나타낸다.

모든 관측점(Observation) 에서의 y값의 error(오차)가 존재하고, 이 오차들의 총 합을 줄여 나가면 된다.

오차를 줄여 나가서, 최소값이 되는 직선을 찾으면 끝난다.

이제 실제 데이터를 가지고 실습해보자.
# 경력과 연봉의 관계 분석을 통해, 누군가 입사했을 때,
# 그사람의 경력에 맞는 연봉을 제시해 줄 수 있도록 합니다.
df = pd.read_csv('data/Salary_Data.csv')
df.head()

>>> df.shape
(30, 2)
# Nan 값이 있는지 찾기
>>> df.isna().sum()
YearsExperience 0
Salary 0
dtype: int64
# YearsExperience의 데이터를 X로 만들기
>>> X = df.iloc[:, 0]
>>> X.shape
(30,)
# X 2차원이어야 학습이 가능하다
# 왜냐하면 인공지능 학습하는 함수인 fit 함수는
# X값은 2차원으로 넣어야 동작하기 때문이다.
>>> X = X.values.reshape(30, 1)
>>> X
array([[ 1.1],
[ 1.3],
[ 1.5],
[ 2. ],
[ 2.2],
[ 2.9],
[ 3. ],
[ 3.2],
[ 3.2],
[ 3.7],
[ 3.9],
[ 4. ],
[ 4. ],
[ 4.1],
[ 4.5],
[ 4.9],
[ 5.1],
[ 5.3],
[ 5.9],
[ 6. ],
[ 6.8],
[ 7.1],
[ 7.9],
[ 8.2],
[ 8.7],
[ 9. ],
[ 9.5],
[ 9.6],
[10.3],
[10.5]])
# Salary의 데이터를 y로 만들기
y = df['Salary']
0 39343.0
1 46205.0
2 37731.0
3 43525.0
4 39891.0
5 56642.0
6 60150.0
7 54445.0
8 64445.0
9 57189.0
10 63218.0
11 55794.0
12 56957.0
13 57081.0
14 61111.0
15 67938.0
16 66029.0
17 83088.0
18 81363.0
19 93940.0
20 91738.0
21 98273.0
22 101302.0
23 113812.0
24 109431.0
25 105582.0
26 116969.0
27 112635.0
28 122391.0
29 121872.0
Name: Salary, dtype: float64
# 피처스케일링한다.
#### 리니어 리그레이션 라이브러리는, 자체에서 피처스케일링을 해준다
#### 따라서 바로 데이터를 사용해도 된다,.
# 학습용과 테스트용으로 데이터 분리한다.
>>> 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 = 3)
## 모델링한다.
>>> from sklearn.linear_model import LinearRegression
>>> regressor = LinearRegression()
# 학습시킨다. X_train, y_train 으로 정보를 취합한다.
>>> regressor.fit(X_train, y_train)
>>> LinearRegression()
LinearRegression()
# 학습이 끝나면,
# 이 인공지능이 얼마나 똑똑한 인공지능인지 테스트 해야 한다.
# 리그레션의 테스트는 MSE를 구해본다.
# 인공지능한테, 우리가 학습에 사용하지 않는 데이터를
# 넣어서 결과를 가져온다, 이 값이 바로 y hat이다.
>>> y_pred = regressor.predict(X_test)
>>> y_pred
array([ 72348.74519846, 53511.61125108, 100604.44611953, 115674.15327744,
81767.31217215, 68581.31840899])
>>> y_test
15 67938.0
5 56642.0
22 101302.0
26 116969.0
18 81363.0
14 61111.0
Name: Salary, dtype: float64
# 오차를 구해본다.
# 오차 = 실제값 - 예측값
>>> error = y_test - y_pred
# MSE 값이 적을수록 성능이 좋다고 할 수 있다.
# MSE = Mean Squared Error
>>> (error ** 2).mean()
14564390.306734825
이를 차트로 확인해보자.
plt.plot(y_test.values)
plt.plot(y_pred)
plt.legend(['Real', 'Pred'])
plt.show()

'Python > Machine Learning' 카테고리의 다른 글
| sklearn 라이브러리의 분류 결과표 Confusion Matrix (분류 문제의 인공지능 성능 평가 방법) (0) | 2022.05.09 |
|---|---|
| Multiple Linear Regression 실습 예제 (0) | 2022.05.09 |
| 데이터 전처리 기초 #5 sklearn라이브러리를 이용해 Dataset 나누기 (Training,Test) (0) | 2022.05.09 |
| 데이터 전처리 기초 #4 피처 스케일링 Feature Scaling(표준화, 정규화) (0) | 2022.05.09 |
| 데이터 전처리 기초 #3 sklearn(사이킷런) 라이브러리를 이용해 카테고리컬 데이터 처리하기 (레이블 인코딩, 원 핫 인코딩) (0) | 2022.05.06 |