일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- OpenAI
- Python
- 스마트컨트랙트
- 딥러닝
- 실습
- querydsl
- 웹개발
- 블록체인
- SQL
- seaborn
- 데이터 시각화
- java
- Practice
- 데이터베이스
- ORM
- SpringDataJpa
- 프로그래밍
- node.js
- 코딩
- 암호화폐
- ChatGPT
- 블록체인실습
- 데이터 분석
- tutorial
- JPA
- 파이썬
- springboot
- Ai
- 이더리움
- 머신러닝
- Today
- Total
집돌이 공대남 IT
데이터로 미래를 보다: 범죄 예측 머신러닝 모델 만들기 본문
안녕하세요 공대남입니다!
현실에서 범죄를 예측할 수 있다면 얼마나 좋을까요?
범죄 예측 프로그램을 만들기 위한 실습 과정을 아래와 같이 상세하게 설명해보겠습니다.
이 예제에서는 Python을 사용하며, 대표적인 머신러닝 라이브러리인 scikit-learn을 사용합니다.
1단계: 데이터 수집
먼저, 범죄 데이터를 수집해야 합니다. 이 데이터는 국가, 도시, 지역 당 범죄율, 인구, 경제 상태, 교육 수준 등 여러 가지 요인을 포함할 수 있습니다. 공공 데이터 포털, Kaggle 등에서 이러한 데이터를 찾을 수 있습니다.
2단계: 데이터 전처리
수집한 데이터를 적절하게 전처리해야 합니다. 누락된 값을 채우거나, 이상치를 제거하거나, 범주형 변수를 숫자로 변환하는 등의 작업을 포함합니다.
import pandas as pd
from sklearn.preprocessing import LabelEncoder
# 데이터 로드
data = pd.read_csv('crime_data.csv')
# 결측치 처리
data = data.fillna(method='ffill')
# 범주형 데이터 숫자로 변환
le = LabelEncoder()
data['Category'] = le.fit_transform(data['Category'])
3단계: 학습 데이터와 테스트 데이터 나누기
전처리한 데이터를 학습 데이터와 테스트 데이터로 나눕니다.
from sklearn.model_selection import train_test_split
X = data.drop('Category', axis=1) # 타겟 변수 제외한 나머지를 특성 변수로 사용
y = data['Category'] # 타겟 변수
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
4단계: 모델 학습
이제 머신러닝 모델을 학습시킬 차례입니다. 이 예제에서는 로지스틱 회귀 모델을 사용하겠습니다.
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train, y_train)
5단계: 모델 평가
학습한 모델의 성능을 평가합니다.
from sklearn.metrics import classification_report
predictions = model.predict(X_test)
print(classification_report(y_test, predictions))
이제 범죄 예측 모델이 준비되었습니다!
물론, 실제 문제에서는 모델의 성능을 더욱 향상시키기 위해 여러 가지 최적화 기법을 사용하게 될 것입니다.
이에는 모델의 하이퍼파라미터 튜닝, 다른 모델 시도, 앙상블 기법 사용 등이 포함될 수 있습니다.
최적화 중 하나인 하이퍼파라미터 튜닝에 대해서 설명하려 합니다.
이 과정에서는 모델의 성능에 영향을 미치는 여러 매개변수들을 조정하며 최적의 세팅을 찾아봅니다.
하이퍼파라미터 튜닝
하이퍼파라미터는 머신러닝 모델의 성능에 영향을 미치는 매개변수들입니다. 이 값들은 학습 과정에서 자동으로 학습되는 것이 아니라, 사람이 직접 설정해주어야 합니다.
가장 기본적인 하이퍼파라미터 튜닝 기법은 그리드 검색(Grid Search)과 랜덤 검색(Random Search)입니다.
1단계: 그리드 검색(Grid Search)
그리드 검색은 모든 가능한 하이퍼파라미터의 조합을 시도해보는 것입니다. 예를 들어, 로지스틱 회귀 모델의 경우 C
값과 penalty
값을 변경해가며 최적의 조합을 찾아볼 수 있습니다.
from sklearn.model_selection import GridSearchCV
parameters = {'C': [0.1, 1, 10, 100],
'penalty': ['l1', 'l2']}
grid_search = GridSearchCV(LogisticRegression(), parameters)
grid_search.fit(X_train, y_train)
# 최적의 파라미터 확인
print(grid_search.best_params_)
2단계: 랜덤 검색(Random Search)
그리드 검색이 모든 가능한 조합을 시도하는 반면, 랜덤 검색은 특정 분포에서 랜덤하게 하이퍼파라미터를 샘플링하여 사용합니다. 이 방법은 그리드 검색보다는 덜 꼼꼼하지만, 많은 수의 하이퍼파라미터를 빠르게 탐색하는 데 유용합니다.
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform
parameters = {'C': uniform(0, 100),
'penalty': ['l1', 'l2']}
random_search = RandomizedSearchCV(LogisticRegression(), parameters)
random_search.fit(X_train, y_train)
# 최적의 파라미터 확인
print(random_search.best_params_)
하이퍼파라미터를 최적화한 후, 다시 모델을 학습시키고 평가하면 보다 개선된 성능을 얻을 수 있습니다. 그러나 주의할 점은 모델의 복잡성이 증가하여 과적합(overfitting)이 일어날 수 있다는 점입니다. 이를 방지하기 위해서는 교차 검증(cross-validation) 같은 기법을 활용하면 좋습니다.
'IT > 파이썬' 카테고리의 다른 글
파이썬으로 이해하는 블록체인: Proof of Work와 거래 추가하기 (0) | 2023.07.29 |
---|---|
블록체인으로 나만의 실습 공간 만들기 (0) | 2023.07.28 |
[Python]ORM을 이용한 파이썬 실습(게시판 구현) (0) | 2023.03.05 |
[Python]파이썬에서 ORM 활용하기 (0) | 2023.03.05 |
[Python]Python으로 MySQL 서버에 접속해 데이터 다루기 (0) | 2023.03.05 |