[WIL] 20.07.3rd week

우주먼지·2020년 7월 17일
1

TIL

목록 보기
5/28

딥러닝(단층 퍼셉트론)

단층 퍼셉트론은 은닉층이 없는 신경망이다. 입력층과 출력층으로 이루어져 있으며, 입력값과 가중치, 편향을 이용하여 출력값을 구한다.

입력값의 수와 가중치의 수는 같고, 편향과 출력값, 퍼셉트론의 수가 같다.

딥러닝을 진행할 때는 데이터를 미니배치하여 진행한다. 미니배치란 전체 데이터를 쪼개서 한꺼번에 처리하는 것이다. 이 방법은 효율성이 높고, 데이터의 특성을 살릴 수 있다는 장점이 있다.

모델의 정확도를 측정하기 위하여 손실함수 값을 계산한다. 이 때 손실함수로 사용하는 것 중 평균제곱오차 방법이 있다. 이는 예측값과 출력값의 차이의 제곱을 통해 정확도를 측정하는 방법인데, 0에 가까울수록 정확도가 높은 것이다.

학습을 하는 방법 중 경사하강법이 있다. 이는 순전파와 역전파를 번갈아 반복하면서 정확도를 손실기 기울기 값이 0이 되도록 하는 방법이다. 실제로 0이 될수는 없고, 그 주변 값인 local minimum값이 된다.
여기서 순전파는 신경망의 구조를 따라가며 출력값, 손실함수값을 차례로 계산하는 방법이고, 역전파는 이를 반대로 진행하는 방법이다. 역전파를 통해 나온 손실기울기에 학습률을 곱하고 빼서 파라미터를 조정한다.

데이터 중에 수치적 데이터가 아닌 데이터는 원-핫 벡터를 사용한다. 모든 경우의 수를 0과 1로 나타내어 수치 데이터로 바꿔주는 방법이다.

자연어 처리(전처리 과정)

자연어 처리는 전처리과정인 문장에서 단어별로 자르는 것 ->임베딩과정인 벡터공간에 비슷한 의미를 가진 단어끼리 배치하는 것 -> 분석단게인 딥러닝을 활용하여 분석하는 단계로 이루어져 있다.

전처리 과정에서는 정규표현식을 사용하는 방법과 토크나이저를 사용하는 방법이 있다.

정규표현식은 re라는 라이브러리를 이용하여 원하는 모양을 지정해줘서 잘라주는 방법이다.
예) 010-1234-5678 => (r'\d+.\d+.\d')

tokenizer는 라이브러리를 이용한 방법이다. nltk라이브러리를 많이 사용한다. 가장 기본적인 형태로 word_tokenize(text)로 사용한다.
그 외에 WordPunctTokenizer, TreebankWordTokenizer, RegexpTokenizer등이 있다.(라이브러리.tokenize(text)방식으로 사용)

또한 문장을 자르는 라이브러리도 존재. sent_tokenize(한국어 문장은 kss.split_sentences(text) 사용)
한국어를 위한 tokenizer는 from konlpy.tag import Okt, Kkma을 사용한다.(Okt.morphs(text))

어간만을 추출할 수 있는 라이브러리도 있다. 이는 어간을 삭제하는데 사용한다.

from nltk.stem import Porterstemmer
PorterStemmer.stem(word)

from nltk.corpus import stopwords # need download
stopwords.words('english') # 불용어들이 들어있다.

단어들 중에 불용어, 어간을 제거한 후, 단어 중 제일 빈도수가 높은 단어들을 인덱싱한다. 인덱싱 후 이 단어 배열을 원-핫 벡터로 바꿔준다.

이를 from wordcloud import WordCloud를 이용하여 시각화한다.

머신러닝

지도학습, 비지도학습, 강화학습으로 나눠진다.
지도학습은 출력값을 지정, 비지도학습은 지정해주지 않는다. 강화학습은 보상을 위해 학습하는 것이다.

학습 후 정확도를 측정하기 위해서는 metrics 라이브러리를 사용한다.

<진행 순서>
1. clf = 머신러닝모델 생성 # svm.SVC() or KNeighborsClassifier(n_neighbors=1)
2. clf.fit(문제 , 답)
3. clf.predict(값을 얻고 싶은 데이터 )
4. ac_score = metrics.accuracy_score(실제답, 예측결과)
모델을 생성후, 훈련데이터를 이용하여 학습을 진행한다. 그 후 테스트 데이터를 이용하여 정확도를 확인한다.

학습 모델을 저장하기 위해서는 pickle, joblib라이브러리를 사용한다. 학습한 모델을 다시 학습하지 않고 사용하기 위해서 학습모델을 파일로 저장해 두는 방법이다.

지도학습에는 분류와 회귀가 있다.

분류 중 KNN알고리즘에 대해 배웠다. 데이터를 훈련데이터와 테스트 데이터로 나눈다. 보통 전체 데이터의 70~80%를 훈련데이터로 사용하고 나머지를 테스트 데이터로 사용한다. 그 후 훈련데이터를 이용하여 학습모델에 학습시킨다. 학습된 모델에 테스트 데이터를 넣어서 결과를 출력하고 정확도를 평가한다.

pandas 라이브러리

결측치를 제거하거나 내가 원하는 값으로 바꿔줄 수 있다.

df.dropna(axis=0)
df.fillna(value=0)

결측치가 있는 행을 제거하거나 결측치를 value값으로 지정해준다.

pandas만으로도 데이터 시각화가 가능하다.

인덱스를 두줄로 하는 멀티 인덱스가 가능하다.

out = ['G1']*3 +['G2']*3
in = [1, 2, 3]*2
zip = list(zip(out, in))
my_index = pd.MultiIndex.from_tuple(zip)

안과 밖의 인덱스를 지정해준 후, zip함수를 통해 인덱스를 묶어준다. 그 후, tuple이 된 인덱스를 지정해준다.

groupby를 이용하여 값들을 그루핑 해준 후에 평균과 같은 연산이 가능하다. (df.groupby('gender')['height'].mean()

명복형 변수 함수

df['sex'].unique() # 고유한 값들을 출력
df['sex'].nunique() # 고유한 값의 개수를 출력
df['sex'].value_counts() # 값들의개수. 도수분포표를 출력

이번주의 소감

한주동안 생각보다 적은 내용을 배운것같아 아쉽다. 더 많은 내용을 배운다면 내가 소화할 수 있을지는 모르겠지만, 그래도 모든 과목으로부터 얻는게 많았으면 좋겠다.

이번주말, 다음주까지는 정처기가 있다. 정처기가 끝나면 사람들과 모여서 스터디도 하고싶다.

profile
안녕하세요 ㅎㅎ

0개의 댓글