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
- kt 에이블스쿨 7기
- 에이블스쿨 7기
- AI트랙
- adsp미어캣
- 후기
- kt에이블스쿨8기
- 에이블기자단
- aice associate
- springboot
- msaez
- ktaivleschool
- KT에이블스쿨
- KT 에이블스쿨
- Kafka
- KT AIVLE School
- kt에이블스쿨7기
- kt aivleschool 8기
- 에이블 기자단
- kt 에이블스쿨 8기
- 기자단
- kt aivle school 7기
- 7일 전사
- 미니프로젝트
- 데이터분석
- 마이크로서비스
- MSA
- 데이터
- 어답터 민
- kt aivleschool 7기
- 관세용어
Archives
- Today
- Total
Hseong
[KT AIVLE SCHOOL 7기] - 머신러닝(1) 회귀 본문
728x90
반응형
오늘은 그동안 배운 파이썬 기본 + 시각화를 기반으로 본격적으로 머신러닝과 그를 위한 초석을 다지는 이론을 정리하는 시간이다!
데이터 확인 및 이해
# 데이터 읽어오기
path = 'https://raw.githubusercontent.com/Jangrae/csv/master/airquality_simple.csv'
data = pd.read_csv(path)
# 상위 몇 개 행 확인
data.head()
해당 데이터는 공기의 여러 요소들에 대한 데이터이다! 그 전에 변수와 기술 통계를 보기 위해 아래와 같은 구문을 사용한다
# 변수 확인
data.info()
# 기술통계 확인
data.describe()
- 데이터에 대해서 설명하면 info()를 통해서 각 변수들의 자료형과 결측치가 있는지 확인 가능하다! 머신러닝에 있어서 결측치는 앞으로 여러 평가를 하는데에 중요하기 때문에 사전 확인 필요하다 꼭이다!!
- 그리고 여러 1,2,3 분위수와 평균 그리고 중위수를 보기 위해 기술 통계 구문인 describe()를 통해 데이터의 구조(분포)를 알아본다!
# Target 변수 값 분포 확인
plt.figure(figsize=(8, 5))
plt.subplot(2, 1, 1)
plt.hist(data['Ozone'], bins=30, alpha=0.7, ec='black')
plt.subplot(2, 1, 2)
plt.boxplot(data['Ozone'], vert=False)
plt.show()
- subplot을 이용하여 2행 1열로 표현하고, figure(figsize=()) 구문으로 사이즈를 조절한다
- 그리고 각 histplot 과 boxplot으로 시각화를 간단하게 시킨다 여기서 vert=False 를 주어서 x축과 평행하도록 보기 좋게 보여준다!
# 상관관계 확인
data.corr(numeric_only=True)
다음은 상관관계를 확인해본다! 이는 -1~+1 사이의 값을 갖는데 0과 가까울수록 아무런 관련이 없다고 보면된다!
그래서 -1,+1과 가까울수록 강한 음,양의 상관관계를 가지므로 -1과 가깝다고해서 해당 요인을 빼버린다면 프로젝트 때 실수를 할 것 같아서 다시 헷갈릴까봐 블로그에 남기려고 했다 (사실 아직 초보라서 중요성을 모름..미안해 미래 팀원분들..)
# 상관관계 시각화
plt.figure(figsize=(8, 5))
sns.heatmap(data.corr(numeric_only=True),
annot=True,
cmap='Blues',
fmt='.2f',
cbar=False,
square=True,
annot_kws={'size': 8})
plt.show()
# kwargs: Keyword Arguments
seaborn에 다채로운 heatmap을 통해 해당 상관관계를 시각화 시켰다! 당연히 n,n칸은 동일하므로 1이다!
# Temp --> Ozone 상관관계
plt.figure(figsize=(8, 5))
plt.scatter(data['Temp'], data['Ozone'])
plt.show()
- 다음은 온도와 오존의 상관관계를 시각화 시키기 위해 해당 구문을 썼다. heatmap과 상관관계를 보면 오존과 온도는 무려 0.68로 확인해 볼만하다!
- 결과가 위와 같이 나왔는데 뭔가 1차 함수로 그리고 싶게 생기지 않았을까??(물론 내 생각임..)
데이터 준비 (전처리)
이제 데이터를 이해하고 준비를 했으므로 본격적으로 머신러닝을 위한 중요한 작업인 전처리를 진행한다!
# 결측치 확인
data.isnull().sum()
# 전날 값으로 결측치 채우기
data.ffill(inplace=True)
# 확인
data.isnull().sum()
- 여기서 보면 insnull().sum() 을 통해서 각 column마다 결측치의 갯수를 확인할 수 있다.
- 그리고 ffill이라는 것은 결측치 기준 앞에 있는 값으로 해당 값을 채운다는 뜻이고, inplace=True는 원래 데이터 프레임의 해당 변경 사항을 반영한다는 뜻이다!
- 그래서 잘됐는지 다시 결측치를 확인하면 두 번째 그림과 같이 결측치가 사라진 것을 확인 가능하다!
# 변수 제거
drop_cols = ['Month', 'Day']
data.drop(columns=drop_cols, inplace=True)
# 확인
data.head()
- 여기서 아까 확인해본 상관관계를 통해서 의미가 없다고 생각하는 요인들(0과 가까운 상관관계를 갖는 녀석들)을 위주로 변수를 drop 문을 통해 제거한다!
- 그리고 데이터를 확인해보면 위 그림과 같이 제거되는 것을 볼 수 있다!
# target 확인
target = 'Ozone'
# 데이터 분리
x = data.drop(target, axis=1)
y = data.loc[:, target]
- 그리고 머신러닝 전에 중요하게 알아두어야할게 있다! 데이터(영향을 주는 요인)을 columns에서 선택하여 X에 넣어주고, 최종적으로 도출할 가설의 결과인 변수를 Y에 최종적으로 넣어야한다!
- 현재 하고있는 것은 이중,다중 분류가 아닌 단일변수에 대한 머신러닝이라서 위 그림처럼 데이터를 나누려고한다!
- drop 문을 통해서 target이 오존이므로 axis=1을 통해 열을 명시하여 해당 데이터를 제외한 나머지 데이터를 x에 넣고, target인 오존은 loc 구문을 통해 행을 전체로, 열은 오존만 인덱싱하여 y에 넣어준다!
- 근데 이걸 일일히 train,test 세트를 나누려면 번거로우니 sklearn을 사용하여 딸깍! 해준다
# 모듈 불러오기
from sklearn.model_selection import train_test_split
# 7:3으로 분리
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1) # test_size default=0.25
- 여기서 sklearn.model_selection에 train_test_split을 통해서 자동으로 나누어주는데 몇 가지 볼 변수들이 있다
- train : test = 7 : 3 비율로 나누기 위해 test_size를 정의해주고, randon_state는 1,2,42 등으로 설정해서 분할로 데이터를 섞을 때 무작위로 섞는 비율이라 일단은 1로 했다!
모델링 ( ML )
# 1단계: 불러오기
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
# 2단계: 선언하기
model = LinearRegression()
# 3단계: 학습하기
model.fit(x_train, y_train)
# 4단계: 예측하기
y_pred = model.predict(x_test)
# 5단계: 평가하기
print(mean_absolute_error(y_test, y_pred))
- 먼저 선형 회귀를 위해서 LinearRegression 을 가져오고 , 평가요소로 metrics에서 mae 라는 평균절대오차를 이용한다.
- model 을 선형회귀로 설정하고, 학습을 위해 기존에 나누었던 데이터셋을 통해서 fit을 통해 학습한다.
- 그리고 학습된 모델을 x_test 의 데이터를 이용하여 예측하고, 이를 y_test값과 예측값을 비교하여 평가 한다!
# 예측값, 실젯값 확인
print(y_pred[:10])
print('-' * 72)
print(y_test.values[:10])
# 예측값, 실젯값 시각화 비교
plt.figure(figsize=(8, 5))
plt.plot(y_pred, label='Predicted')
plt.plot(y_test.values, label='Actual')
plt.legend()
plt.show()
- 결과를 살펴본다면 어느정도 예측값과 실제값이 일치하는 경향을 보이기도 하지만 특정 구간은 차이가 나는 경우가 있다!
- 이것은 앞으로 배울 여러 튜닝과 여러 모델을 사용한다면 오류를 최소화 시킬 수는 있다!
- 수치들을 본다면 거의 비슷하게 모델이 예측한 것을 알 수 있다
728x90
반응형
'KT AIVLE SCHOOL 7기' 카테고리의 다른 글
[KT AIVLE SCHOOL 7기] - 머신러닝(3) 튜닝 (0) | 2025.04.08 |
---|---|
[KT AIVLE SCHOOL 7기] - 머신러닝(2) 분류 (0) | 2025.04.08 |
[KT AIVLE SCHOOL 7기] - 데이터 시각화(Matplotlib,Seaborn) (0) | 2025.04.07 |
[KT AIVLE SCHOOL 7기] - Pandas(데이터프레임) (0) | 2025.04.07 |
[KT AIVLE SCHOOL 7기] - 합격 후기 (0) | 2025.04.07 |