5. 연습 1단계 : 기계학습을 활용해 외국어 판별하기
학습을 위한 데이터를 준비
언어별로 각 알파벳 출현빈도가 다르다는 아이디어로 언어 판별
ex) 영어(en) / 불어(fr) / 인도네시아어(id) / 따갈로그(tl)
각 언어별
알파벳 캐릭터
출현빈도수 학습
모델 생성
테스트를 위한 데이터를 준비스코어출력/재학습
모델 저장
6. 연습 1단계 : 외국어 판별하기(계속)결과출력
소스
check_freq
함수는 학습데이터로 사용할 하나의 텍스트 파일을 읽어 들여서,
그 텍스트 파일안에 있는 알파벳의 출연빈도를 map 타입으로 리턴 합니다.
이 함수는,
load_files
에서 호출되어,
1. 언어별로 모든 학습데이터 파일들과 테스트데이터 파일들의 출연빈도를 가져옵니다.
2. 다음, 이렇게 해서 파이썬에서 사용할 수 있는 json 형태로 변환/저장 합니다.
3. 그리고, 이렇게 학습시키고,
(svm.SVC()은 기계학습 방식인데요, 이에 대해서는 다음 장에서 설명합니다.)
4. 잘 학습해서 결과를 잘 내는지. 테스트데이터를 넣어서 예측합니다.
5. 나머지 이 아래 쪽 코드들은 테스트한 결과들을 출력해보는 코드들 입니다.
7. 연습 2단계 : 데이터 시각화 연습
이를 위해 설치할 패키지들
1. matplotlib
2. numpy
3. pandas
9. 연습 3단계 : 학습 후 모델 저장하기
결과출력소스
학습을 한번 시켰으면,
그것을 저장해 두고, 영구적인 두뇌로 사용해야지,
매번 판별을 할 때 마다 학습을 시킬 수는 없습니다.
그래서
한번 학습하면, 저장해 두었다가,
계속 그걸로 사용하고 싶습니다.
어떻게 할까요?
from sklearn.externals import joblib
를 사용하여,
학습한 clf 객체를 저장합니다.
# 학습 데이터 저장하기
joblib.dump(clf, “./lang/freq.pkl")
10. 연습 4단계 : 저장 한 모델 사용하기
결과출력소스
여기가 모델 데이터 파일을 불러들이는 부분입니다.
detect_lang
함수내에서 판별할 글의 각 알파벳별 사용 빈도수를 계산합니다.
12. 서포트 벡터 머신
Support Vector Machine
선형 SVM이 두 자료(흰색 원, 검은색 원)을
직선으로 분리하고 있다.
* 비선형 SVM의 예시
13. 연습 1단계 : SVM 실제 사용을 위한 데이터 생성
결과출력소스
이렇게 하면,
출력은 ok와 개수 정도가 찍히지만,
생성된 csv파일에는
데이터가 임의로 많이 생성되었을 겁니다.
나중에 건강검진 센터 같은 곳에서
실제 데이터를 받아서 사용할 수 있으면
좋습니다.
생성된 CSV파일
14. 연습 2단계 : 생성한 BMI 데이터로 SVM 학습 모델 연습
결과출력소스
SVM을 사용한다는 것은…
clf = svm.SVC()
clf.fit(data_train, label_train)
이 부분만 보시면 됩니다.
16. Random Forest, Randomized Trees
랜덤 포레스트 테스트 과정 : 각 결정트리로 부터 얻어진 결과를 평균, 곱하기,
또는 과반수 투표 방식을 통해 최종 결과를 도출 해낸다.
17. 연습 1단계 : 연습을 위한 데이터 다운로드
결과출력
소스
출력결과는 단순히 OK 이지만,
다운로드 받은 파일을 확인해 보면 이렇습니다.
여기 기록된 한 줄 한 줄은, 버섯 하나 하나의 특징들을 기호로 표시한 것 입니다.
18. 연습 1단계 : 연습을 위한 데이터 다운로드(추가)
종종 이런 에러가 발생하는 분들도 계시는데…
이렇게 하신 후 다시 실행 하시면 에러가 없어 집니다.
19. 연습 2단계 : 다운로드한 버섯 데이터로 랜덤포레스트 연습
결과출력소스
코드 25라인에 보면,
랜덤포레스트를 위한 scikit-learn 의 고마운 함수를 확인하실 수 있습니다.
clf = RandomForestClassifier()
clf.fit(data_train, label_train)
20. 연습 3단계 : 다운로드한 버섯 데이터로 랜덤포레스트 연습
결과출력
소스
각 훈련데이터의 버섯 특성을 수치 기호화 해서 사용하면,
훨씬 더 좋은 성능의 기계학습 결과를 기대할 수 있습니다.
21. 4-7 HOW TO VALIDATE THE DATA
with scikit-learning
22. K-fold cross validation
훈련 전용 데이터와 테스트 전용 데이터를 K개로 분할하여 교차검증하는 방식
데이터를 K개로 분할
1. AAA BBB CCC DDD …… ZZZ
2. AAA BBB CCC DDD …… ZZZ
3. AAA BBB CCC DDD …… ZZZ
…
K. AAA BBB CCC DDD …… ZZZ
테스트 전용 데이터로 사용
테스트 전용 데이터로 사용
테스트 전용 데이터로 사용
테스트 전용 데이터로 사용
= 검증 결과 점수
검증 결과 점수들의 평균
= 검증 결과 점수
= 검증 결과 점수
= 검증 결과 점수
23. 연습 1단계 : 교차검증(CROSS VALIDATION) 연습소스
결과출력
이 예제 소스를 보시면,
교차검증의 원리를 알수 있습니다.
24. 연습 2단계 : scikit-learn으로 교차검증(CROSS VALIDATION)
결과출력
소스
-
scores = model_selection.cross_val_score(clf, data, label, cv=5)
사실 이렇게 scikit-learn을 사용하시면,
훨씬 더 간단하게 교차검증을 할수 있습니다.
25. 연습 3단계 : scikit-learn의 GridSearch 연습
결과출력소스
-
알고리즘 별로 파라미터 조정을 좀 하면 정확도가 많이 올라갑니다.
그래서 파라미터 튜닝이 중요한데요.
그리드서치를 사용하면, 파라미터 튜닝이 가능합니다.
scikit-learn에도 이것을 손쉽게 사용할 수 있는 함수를 제공합니다.
코드 23라인,
clf = GridSearchCV( svm.SVC(), params, n_jobs=-1 )
clf.fit(train_data, train_label)
부분을 주목하시기 바랍니다.