전체 702

sigmoid, tanh의 gradient vanishing 문제

0. 서론 sigmoid와 tanh에서 왜 gradient vanishing문제가 발생하는지 알아보고, 이를 어떻게 relu를 이용해서 해결할 수 있는지 알아본다. 1. tanh와 simoid의 기울기 tanh와 sigmoid의 도함수는 위사진과 같다. 딥러닝은 back propagation 과정에서 활성함수의 기울기만큼 웨이트가 개선된다. 그런데 기울기의 최대가 tanh의 경우 x=0에서 1, sigmoid는 x=0에서 0.3정도 된다. 즉 tanh나 sigmoid를 사용하면 대부분의 경우 활성함수의 기울기가 1보다 작다. 이때 딥러닝 모델의 layer가 많다면, back propagation과정에서 1보다 작은값이 계속해서 곱해지게 된다. 이러면 기울기가 무한히 작아지는 현상이 발생하며 이 현상을 g..

위키독스 LDA실습 2 - sklearn이용

1. 데이터 다운 (1) 데이터 다운 nltk.download() import pandas as pd import urllib.request urllib.request.urlretrieve("https://raw.githubusercontent.com/franciscadias/data/master/abcnews-date-text.csv", filename="abcnews-date-text.csv") data = pd.read_csv('abcnews-date-text.csv', error_bad_lines=False) # 데이터는 총 100만개 print(len(data)) (2) 데이터 상태 보기 # 데이터는 2개의 열로 이루어져 있음 # publish_data : 뉴스가 나온 날짜, headline_t..

위키독스 LDA실습 1 -gensim라이브러리 이용

위키독스 교재에 있는 주제추출 알고리즘 LSA실습을 진행해본다 wikidocs.net/30708 1. 데이터 추출 뉴스기사 11314건을 사용한다. (1) 필요한 라이브러리 다운 import pandas as pd from sklearn.datasets import fetch_20newsgroups dataset = fetch_20newsgroups(shuffle=True, random_state=1, remove=('headers', 'footers', 'quotes')) documents = dataset.data len(documents) 11314 (2) 데이터 형태 확인 documents[1] (3) 카테고리확인 총 20개의 토픽이 있다. print(dataset.target_names) (4)..

[백준] 15824 너 봄에는 캡사이신이 맛있단다.

1. 첫번째 풀이 당연히 아래처럼 itertool써서 모든 조합을 전부 구하면 그냥 짜면 시간초과가 난다 from itertools import combinations N=int(input()) L=list(map(int,input().split())) ans=0 for i in range(2, N+1): comb=list(combinations(L,i)) for tup in comb: ans+=max(tup)-min(tup) print(ans) 2. 두번째 풀이 문제에서 주목할 점은 "가장 큰 수"와 "가장 작은수"의 차 만을 구해주면 된다는것. 따라서 숫자를 두개씩 뽑아서 하나는 가장 큰수, 하나는 가장 작은수 로 두고, 그 사이의 숫자의 개수만큼 경우의 수를 곱해주는 식으로 구한다. 아래의 예를 통..

알고리즘/수학 2020.10.09

[타이타닉 데이터]seaboran의 distplot으로 시각화하기

import seaborn as sns #메틸렙에서 동작하는 시각화 라이브러리 f,ax=plt.subplots(1, 3, figsize=(20, 6)) sns.distplot(train[train['Pclass'] == 1].Fare,ax=ax[0]) ax[0].set_title('Fares in Pclass 1') sns.distplot(train[train['Pclass'] == 2].Fare,ax=ax[1]) ax[1].set_title('Fares in Pclass 2') sns.distplot(train[train['Pclass'] == 3].Fare,ax=ax[2]) ax[2].set_title('Fares in Pclass 3') plt.show()

[판다스함수] qcut과 cut함수

qcut은 데이터의 개수를 기준으로 데이터를 나누고 cut은 데이터의 수치를 기준을 데이터를 나눈다. 아래에 코드와 자세한 예시가 있다. 실제 데이터 예시는 타이타닉 네모카드 하나가 데이터이고, 적힌 숫자가 그 데이터의 값. 1. qcut 데이터를 나누고싶은 구역에 모두 똑같은 개수가 들어가도록 나눈다 (한구역에 7개씩) pd.qcut(temp['Age'], 10) 2. cut 데이터를 데이터값을 기준으로 일정하게 자른다.(3씩) pd.cut(temp['Age'], 10)

[타이타닉 데이터] 바이올린 플룻

#바이올린 플룻 #왼쪽 그래프 f, ax = plt.subplots(1,2,figsize=(18,8)) #1행 2열, 크기 # x, y, 기준, 데이터, split(생존과 사망을 합칠지 분리할지), 왼쪽그래프 sns.violinplot("Pclass", "Age", hue="Survived", data=train, split=True, ax=ax[0]) ax[0].set_title('Pclass and Age vs Survived') #제목 ax[0].set_yticks(range(0, 110, 10)) #y축의 단위 (최소,최대,단위) #오른쪽 그래프 sns.violinplot("Survived","Age", hue="Sex", data=train, split=True, ax=ax[1]) ax[1].s..

판다스의 crosstab을 이용해서 시각화

1.기본구조 pd.crosstab(x, y, margin=?).style.background_gradient(cmap='summer_r') => 일때 x는 행, y는 열, margin은 행과 열의 합을 나타낼것인지를 판단해주는 파라미터. style.background_gradient(cmap='summer_r') 은 배경에 색깔일 입혀주는 파라미터 2. 예시 (1) 배경색 없는것 pd.crosstab(train.Survived, train.Pclass, margins=True) (2) margin이 False일때 pd.crosstab(train.Survived, train.Pclass, margins=False).style.background_gradient(cmap='summer_r') (3) 행렬이 ..

missingno 라이브러리를 통한 결측치 확인

* 타이타닉 데이터를 이용 import missingno # data는 dataFrame type missingno.matrix(data, figsize = (15,8)) 위에서부터 첫번째행, 맨아래가 마지막 1309행으로서 각 att의 결손을 보여줌. (하얀색이 결측치) - age와 cabin이 중간중간 결측치가 많음. - train+test된 데이터이기 때문에 survived의 아래쪽은 모두 비어있음 맨오른쪽은 파스크행 이라고 하여 데이터의 완전성을 나타낸다고 함 (정확히 뭔지 잘모르겠음..)

logistic regression에서 loss를 binary cross entropy를 쓰는이유

로지스틱 회귀에서는 loss를 MSE를 쓰지않고 BCE(Binary Cross Entropy)를 쓴다. 그렇다면 왜 로지스틱 회구에서는 BCE loss를 쓰는지 알아본다. 1. MSE 위와같이 loss를 MSE를 사용하고 gradient descent meathod를 이용하여 최적값을 찾으려고 한다. 이때 loss function은 아래와 같다. 이때 문제는 바로 좌우측에 평평한 부분이다. 모양이 너무 평평해서 기울기를 따라 내려가야 하는데, 기울기가 거의 없어서 거의 내려가질 않는 것이다. 이를 convex하지 않다, 즉 볼록하지 않다고 한다. 이를 빨간색으로 표시하면 아래와 같다. (학습이 잘되는 부분은 초록색으로 표시) 2. BCE 이번엔 위와같이 Loss를 bce를 사용했을때를 본다. bce를 사..

딥러닝을 이용한 비선형 분류문제 해결

0. XOR게이트 문제 AND, OR, NAND게이트와는 다르게 XOR게이트는 선형식으로 구분할 수가 없다. 따라서 nand게이트(not and), or게이트, and게이트를 함께 이용하여 mlp모델을 통해 xor게이트를 만든다. 1. 구조 구조는 위와같다. 첫번째 레이어에 NAND,OR 게이트를 쌓고, 두번째 레이어에 AND게이트를 쌓는다. 그러면 xor게이트를 만들 수 있다. 2. 선형모델을 이용하여 비선형 모델 만들기 왼쪽의 선형모델 두개를 레이어로 쌓으면 오른쪽의 비선형모델을 만들 수 있다. * 출처 : 패스트캠퍼스 수학적으로 접근하는 딥러닝 올인원 패키지 Online.

logistic regression 에서 sigmoid함수를 쓰는 이유

0. 문제 50이상이면 1, 50이하이면 0을 갖는 위와 같은 데이터가 있다. 이 데이터를 학습해서 특정 점수를 받았을 때 1을 갖는지 0을 갖는지 분류해주는 모델을 만들어 본다고 하자. 1. linear regression 선형회귀분석으로도 모델을 만들 수 있다. 예측 모형을 만들고, x값을 넣었을 때 y값이 0.5이상이면 1, 0.5이하이면 0을 가지게 한다.(decision boundary) 하지만 선형회귀분석을 통해 모델을 만들면 outliar에 취약해진다. 위 사진과 같이 outliar가 없을때(왼쪽 초록선)보다 outliar가 있을때 기울기가 급격하게 낮아지면서 잘못 분류되는 데이터가 매우 많아지게 된다. 2. logistic regression outliar의문제는 logistic regre..

3. 삼성전자 주식 데이터 분석 - 예측하기(lstm,RNN모델)

시리즈 삼성전자 주식데이터를 분석하고 예측한다. 1. 삼성전자 주식 데이터 분석 - 분석하기 => sosoeasy.tistory.com/332 2. 삼성전자 주식 데이터 분석 - 예측하기(MLP 모델) => sosoeasy.tistory.com/333 3. 삼성전자 주식 데이터 분석 - 예측하기(lstm, RNN 모델) 1~3 이전과 동일 아래 3가지 목차는 ( 2. 삼성전자 주식 데이터 분석 -예측하기(MLP 모델) => sosoeasy.tistory.com/333 ) 과 동일 1. 주가 데이터 받아오기 2. 필요한 패키지 받아오기 3. 데이터 불러오기 4. 데이터 전처리 0. 필요한 라이브러리 받아오기 from tensorflow.keras import models from tensorflow.ker..

2. 삼성전자 주식 데이터 분석 - 예측하기(MLP모델)

시리즈 삼성전자 주식데이터를 분석하고 예측한다. 1. 삼성전자 주식 데이터 분석 - 분석하기 => sosoeasy.tistory.com/332 2. 삼성전자 주식 데이터 분석 - 예측하기(MLP 모델) 3. 삼성전자 주식 데이터 분석 - 예측하기(lstm, rnn 모델) => sosoeasy.tistory.com/334 1. 주가데이터 받아오기 #주가 데이터를 받아오기 위한 패키지 설치 !pip install pandas_datareader !pip install sklearn 2. 패키지 받아오기 datetime : 날짜와 시간을 조작하는 클래스 제공 pandas_datareader : 웹 상의 데이터를 DataFrame 객체로 만드는 기능 제공 pandas : 데이터처리를 위한 라이브러리 numpy ..

1. 삼성전자 주식데이터 분석 - 분석하기

시리즈 삼성전자 주식데이터를 분석하고 예측한다. 1. 삼성전자 주식 데이터 분석 - 분석하기 2. 삼성전자 주식 데이터 분석 - 예측하기(MLP 모델) => sosoeasy.tistory.com/333 2. 삼성전자 주식 데이터 분석 - 예측하기(lstm, rnn 모델) => sosoeasy.tistory.com/334 1. 필요 라이브러리 다운로드 # 데이터를 가져와 편리하게 다룰 수 있도록 PANDAS 패키지를 설치 !pip install pandas_datareader # 필요한 라이브러리 다운로드 from datetime import datetime import pandas_datareader.data as wb 2. 데이터 불러오기 # 시작날짜와 종료날짜 정하기 start = datetime(2..