일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바 패치
- java 면접정리
- 프론트엔드 면접
- 깃허브액션
- 잔디심기
- next로 jwt
- 자동커밋
- 자바 패치노트
- 백엔드 면접
- java 신입면접
- 자동잔디
- 리액트 패치
- 자바17
- 리액트 버전
- githubaction
- 키바나
- 파일비트
- 프론트 면접족보
- NextJs
- 백엔드 신입
- 도커컴포즈
- 엘라스틱서치로 로그관리
- java 신입
- 엘라스틱서치
- 로그스태쉬
- 프론트엔드 신입
- 프론트 면접
- nextjs와 typescript
- 리액트 #무한스크롤
- 리액트 패치노트
- Today
- Total
천쓰의 개발동산
파이썬 사이킷런의 랜덤포레스트로 나이 예측하기!(머신러닝) 본문
파이널떄 맡은 부분이 웹소켓과 머신러닝 부분이다 .
파이썬 자체가 많이 다뤄보질 못해서 한번 해보고 싶었던 부분이기도해서 건강이라는 주제로 자료수집부터 해보는와중
나이예측에 많은사람들이 쓰이는 데이터셋을 찾아 사용해보았다 .
데이터셋은 Kaggle / UCI Machine Learning Repository/ OpenML 에서 찾으면됩니다.
일단 사용하려면 파일을 가져와야겠죠? 판다스로 파일을가져와 정보를확인 합니다.
# 파일가져오기
data = pd.read_csv('../data/life_expectancy_data.csv', sep=',', encoding='utf-8')
# 데이터프레임의 요약 통계 정보 출력
print(data.describe())
# 데이터프레임의 쿨럼값
print(data.columns)
# 쿨럼값의 타입
print(data.dtypes)
랜덤포레스트를 사용하기앞서 나는 기대수명과 숫자로이루어진 정보가 필요해서 숫자형 열만 사용하도록 한번 정제시켜주었다 .
# 숫자형 열만 선택
numeric_data = data.select_dtypes(include=['number'])
이후 결측치 처리라는것을해줘야하는데 이것은 null , NaN 값을 어떻게 처리해줄꺼냐 입니다 . 나는 평균값으로 구하려는찰나, int값들도 사용하기에 median인 중간값으로 변경해서 사용해 주었습니다 .
# 결측치 처리
# numeric_data에 대해 결측치를 중간값으로 대체
numeric_data = numeric_data.fillna(numeric_data.median())
그리고 특성과 타겟을 나눌것인데 특성에따라 타겟은 oo이다 느낌 이다 . 이것으로 타겟을 예측을 할 훈련준비는 모두 맞추었다 .
X = numeric_data[['AdultMortality', 'infantdeaths', 'Alcohol', 'BMI', 'under-fivedeaths', 'Polio', 'Totalexpenditure', 'Diphtheria', 'HIV/AIDS', 'GDP', 'Population', 'thinness1-19years', 'thinness5-9years', 'Incomecompositionofresources', 'Schooling']]
y = numeric_data['Lifeexpectancy']
그리고 RandomForest 모델을 훈련시킬것인데, 이제는 우리가 설정한 데이터값을을 밀어넣으면된다!
# X는 입력 특성, y는 예측할 타겟 변수
# test_size는 테스트 데이터의 비율을 나타냄 (여기서는 20%)
# random_state는 난수 생성 시드로, 같은 시드를 사용하면 항상 같은 결과가 나옴
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# n_estimators는 생성할 트리의 개수를 나타냄
# random_state는 난수 생성 시드로, 같은 시드를 사용하면 항상 같은 결과가 나옴
model = RandomForestRegressor(n_estimators=100, random_state=42)
# 훈련 데이터를 사용하여 모델을 훈련
model.fit(X_train, y_train)
그후 오차범위를위해 테스트 세트를 사용하여 모델의 예측값을 계산을 해주면
# 테스트 세트를 사용하여 모델의 예측값을 계산합니다.
y_pred = model.predict(X_test)
# 평균 제곱 오차(Mean Squared Error, MSE)를 계산합니다.
# y_test는 실제값, y_pred는 모델의 예측값을 나타냅니다.
mse = mean_squared_error(y_test, y_pred)
# 계산된 MSE를 출력합니다.
print(f'Mean Squared Error: {mse}')
오차범위가 2.7 정도 잡히게됩니다 . Men Squared Error는 작으면 작을수록 예측이 잘된다 보시면됩니다!
이후에는 내가 잘 햇는지 시각화를 한번 해볼것인데요
import matplotlib.pyplot as plt
실제값과 예측값을 나누어 예상라인을 그려봅니다.
# 실제값과 예측값 시각화
plt.scatter(y_test, y_pred, label='실제 vs 예측')
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], '--', color='red', label='예상 라인')
plt.xlabel("실제 Life Expectancy")
plt.ylabel("예측 Life Expectancy")
plt.title("실제값 vs 예측값")
plt.legend()
plt.show()
다음피드에는 이것을 가지고와 back front에 사용해보도록 하겠습니다