티스토리 뷰
#1 흐름도
#2 학습 데이터 소스코드
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | from sklearn import svm, metrics import glob, os.path #1 file load files = glob.glob("./lang/train/*.txt") #학습 데이터들을 모두 긁어옴 #학습 데이터와 레이블 리스트 변수를 생성. train_data = [] train_label = [] for file_name in files: #레이블 구하기 basename = os.path.basename(file_name) lang = basename.split("-")[0] #텍스트 추출하기(안에 있는 기사 내용을 뽑아내는것) file = open(file_name, "r", encoding="utf-8") # 기사 내용을 다 뽑아내고 text = file.read() # 그것을 읽어드린 후 text = text.lower() # 소문자로 변환하고 file.close() #읽어드리는 과정을 종료. #------ 여기까지가 레이블을 구하고 기사 내용을 소문자로 변환하여 추출하는 과정 ------- #알파벳 사용 빈도수 구하기 code_a = ord("a") # 97이라는 숫자를 a코드에 저장 code_z = ord("z") # 122라는 숫자를 z코드에 저장. count = [0 for n in range(0, 26)] # 0을 26개를 나열함. for character in text: code_current = ord(character) # current를 출력해보면 기사문장의 알파벳 하나하나을 숫자코드로 변환해서 하나하나 다 출력해줌. if code_a <= code_current <= code_z: count[code_current - code_a] += 1 # 여기 과정이 이해안됨.. count 리스트에 값을 넣는 과정이라는건 이해됨. #정규화 total = sum(count) count = list(map(lambda n:n / total, count) #리스트에 넣기 train_label.append(lang) #lang을 추가 train_data.append(count) #count를 추가 | cs |
5번째 줄 : glob()메소드를 사용해서 학습용으로 사용될 데이터들을 모드 긁어오는 과정, glob() 메소드 참고
8~9번째 줄 : 학습데이터와 학습 레이블 리스트 변수 생성.
13번째 줄 : 읽어들여온 학습 데이터들을 for문을 통해서 가져오는데 여기서는 파일 경로를 제외한 이름을 가지고 온다.
13번째줄까지 하고 출력을 해보면 아래와 같이 출력이 되는것을 확인할 수 있다.
14번째 줄 : files를 출력해보면 ./lang/train/en-2.txt 이렇게 출력이 된다. 14번재줄은 en, fr, tl 이렇게 뽑아내기 위해서 사용이 된다. split() 메소드는 하위 문자열로 분할할때 사용
14번째줄을 출력해보면 아래와 같이 출력되는것을 확인할 수 있다.
17번째 줄 : 기사 내용을 다 뽑아내고
18번째 줄 : 뽑은 기사내용을 읽어드린 후(이때는 대,소문자가 섞여서 출력되는것을 확인할 수 있다.)
19번째 줄 : 소문자로 변환하고(대,소문자가 섞인 기사내용이 소문자로 변환되어서 출력되는것을 확인할 수 있다.
20번째 줄 : 읽어드리는 과정을 종료한다.
여기가지가 레이블을 구하고 기사내용을 소문자로 변환하여 추출하는 과정이다.
이제 알파벳 사용 빈도수룰 구하고 정규화시켜서 리스트에 넣는 과정을 해보도록 하겠다.
27번째 줄 : a를 아스키코드로 변환해서 보면 97이다. 따러서 숫자코드로 저장을 하는 과자ㅓㅇ
30번째 줄 : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 을 count 리스트 변수로 만드는 과정이다.
32번째 줄 : 소문자로 변환된 기사내용을 character 변수에 넣어서 for문을 돌리는 과정이다.
33번재 줄 : character를 출력해보면 기사 문장의 각각 알파벳들을 하나하나 숫자코드로 변환해서 출력을 해주는것을 확인할 수 있다.
34번째 줄 : 조건문이 성립이 된다면, 각각 숫자코드를 count 리스트에 집어넣는 과정이다. (이 과정은 잘 이해가 안되는 부분입니다 잘 알고 계시는 분들은 댓글로 달아주시면 감사하겠습니다.)
40번째 줄 : 카운트 변수의 각 리스트 요소들을 다 더하고
41번째 줄 : 더한 요소들을 0 ~ 1의 값의 범위로 정규화를 시켜준다. lambda 참고 문서
덧붙여서 lambda에 대해 간단하게 알아보면 해당 코드를 다른 방법으로 표현하면 아래와 같이 적을 수 있다.
lambda n:10은
def test(n):
return 10
과 동일하다.
그리고 각 내용들을 리스트에 넣어준다.
위에서는 학습용 데이터를 정규화까지 시키는 과정이다.
학습용 데이터가 있으면 테스트용 데이터가 있어야 한다. 따라서 테스트용 데이터는 학습용 데이터와 코드가 동일하므로 따로 설명은 안하겠습니다.
#3 테스트용 데이터 소스코드
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | files = glob.glob("./lang/test/*.txt") #모든 파일을 다 긁어옴. test_data = [] test_label = [] for file_name in files: #레이블 구하기 basename = os.path.basename(file_name) #파일의 경로를 제외한 이름을 출력 lang = basename.split("-")[0] #split()메서드 : 하위 문자열로 분할. """ filename을 기준으로 파일을 읽어드린 다음에 그 file의 내부에 있는 값을 추출. """ #텍스트 추출하기 file = open(file_name, "r", encoding="utf-8") text = file.read() text = text.lower() #대소문자 구분을 위한것, 소문자로 변환. file.close() #알파벡 출현 빈도 구하기 """ 텍스트에 있는 녀석들을 반복을 해서 하나하나 확인을 하는 작업. """ code_a = ord("a") code_z = ord("z") count = [0 for n in range(0,26)] #count = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] for character in text: code_current = ord(character) if code_a <= code_current <= code_z: """ 'a'97 - 'a'97 = 0 'b'98 - 'a'97 = 1 """ count[code_current - code_a] += 1 """ 0~1 사이에 있는 값인 벡터를 구하기 위해서 정규화를 시켜야함. """ # 정규화 total = sum(count) count = list(map(lambda n:n / total, count)) """ lambda n:10란, def test(n): 매개변수가 하나인 함수를 만드는 것, return 10 """ #리스트에 넣기 test_label.append(lang) test_data.append(count) | cs |
#4 기계학습
1 2 3 4 5 6 7 8 9 | #학습시키기 clf = svm.SVC() #학습기 만듬 clf.fit(train_data, train_label) predict = clf.predict(test_data) score = metrics.accuracy_score(test_label, predict) print("score = ", score) report = metrics.classification_report(test_label, predict) #구분 레포트를 만들어 주는 녀석 print("report : ", report) | cs |
기계학습에 대한 내용은 이전 포스트를 참고하면 될거 같습니다. 이전 포스트
#5 결과
'Python > 머신러닝&딥러닝' 카테고리의 다른 글
[Kaggle] Attention on Pretrained-VGG16 for Bone Age_전처리 과정 (1) | 2019.05.19 |
---|---|
딥러닝 필수 기본 개념 (0) | 2019.05.19 |
Ch02. 퍼셉트론(밑바닥부터 시작하는 딥러닝) (1) | 2019.04.12 |
ch04. 신경망 학습(밑바닥부터 시작하는 딥러닝) (0) | 2019.03.30 |
[실습] 붓꽃 품종 분류를 해보자 (0) | 2018.02.11 |