Notice
Recent Posts
Recent Comments
Link
하루 하루
NLTK - Learning to Classify Text ( 1 ) 본문
Supervised Learning for document classification
(https://youtu.be/kxImnFg4ZiQ)
단계
1. Data preaparation
2. Text preprocessing
male. txt에 있는 이름들에 male이라고 레이블을 붙이고,
female.txt에 있는 이름들에 female이라고 레이블을 붙여서 데이터를 준비했다.
from nltk.corpus import *
import random
labeled_names = ([(name, 'male') for name in names.words('male.txt')] +
[(name, 'female') for name in names.words('female.txt')])
#male.txt 의 단어에 male이라고 레이블을 붙였다.
#Female.txt 의 단어에 Female이라고 레이블을 붙였다.
random.shuffle(labeled_names)
labeled_names
3. Feature enginerring
독이 있는 뱀을 찾아 낼 때, 색을 기준으로 색이 화려하면 독이 있는 뱀이라던지,
머리가 큰 뱀이 독이 있는지 등을 그 기준을 설정하는 단계!
해당 예제에서는 이름의 마지막 글자 ( word[-1] ) 가 성별을 결정하는 중요 기준이라고 설정하였다.
def gender_features(word):
return {'last_letter': word[-1]}
featuresets = [(gender_features(n), gender) for (n, gender) in labeled_names]
featuresets
# feature를 끝나는 단어로 설정했다.
4. Train and evaluate models
나이브베이지안 알고리즘을 사용해서 train을 하였다.
train_set, test_set = featuresets[500:], featuresets[:500]
classifier = nltk.NaiveBayesClassifier.train(train_set)
#나이브베이지안 알고리즘 사용
print("Gender Classification:", nltk.classify.accuracy(classifier, test_set))
# 테스트 네임
결과적으로 80%의 정확도를 보였다
classifier.show_most_informative_features(5)
classifier.classify(gender_features('James'))
* nltk.classify.apply_features
많은 양의 데이터를 처리해야하는 경우 해당 함수를 이용할 수 있다.
overfit / underfit
def gender_features2(name):
features = {}
features["first_letter"] = name[0].lower()
features["last_letter"] = name[-1].lower()
for letter in 'abcdefghijklmnopqrstuvwxyz':
features["count({})".format(letter)] = name.lower().count(letter)
features["has({})".format(letter)] = (letter in name.lower())
return features
와 같이 feature를 많이 적용하게 되면 overfitting 되면서
featuresets = [(gender_features2(n), gender) for (n, gender) in labeled_names]
train_set, test_set = featuresets[500:], featuresets[:500]
classifier = nltk.NaiveBayesClassifier.train(train_set)
print(nltk.classify.accuracy(classifier, test_set))
이전보다 작은 정확도를 보이게 된다.
* training set / dev-text set / test set
dev-text set -> error를 개선하는 것에 사용되는 데이터
'IT > Artificial intelligence' 카테고리의 다른 글
NLTK - Learning to Classify Text ( 3 ) (0) | 2020.05.26 |
---|---|
NLTK - Learning to Classify Text ( 2 ) (0) | 2020.05.26 |
경사하강법 with Pytorch. (0) | 2020.05.18 |
[그림으로 공부하는 머신러닝 알고리즘17 머신러닝 도감] 판다스_1일차 (0) | 2020.05.14 |
[그림으로 공부하는 머신러닝 알고리즘17 머신러닝 도감] 머신러닝_1일차 (0) | 2020.05.14 |
Comments