전체 글 708

binary entropy의 정보이론적 해석

1. 정보량(1) 확률과 반비례 관계발생할 확률이 낮은 사건이 발생한다는 사실을 알때 정보의 양은 커진다. 그러니까 확률과 정보의 양은 반비례하다.(2) 숫자 예시1~100까지 숫자중 정답인 숫자를 맞춰야 하는 문제가 있다고 가정하자.정답이 1~10까지 중에 있다는 정보는 확률이 10/100 => 정보의 양은 10정답이 1~20까지 중에 있다는 정보는 확률이 20/100 -=> 정보의 양은 5..정답이 1~100까지 중에 있다는 정보는 확률이 100/100 => 정보의 양은 1 (3) 로그취하기이때 동전 던지기로 정보의 양은 표현하면동전 하나를 던졌을때 하나가 앞면이 나올 확률은 1/2 => 정보의 양은 2동전 두개를 던졌을 때 두개가 앞면이 나올 확률은 1/2^2 => 정보의 양은 2^2..동전 n개를..

[백준]1091 카드섞기 #인덱스

그냥 하라는대로 하면 되는문제인데 인덱스 장난이 심한 문제. 그래서 코딩에서 가장 중요한건 차분히 침착하게 푸는것 이라는것을 다시한번 상기시키는 문제. 침착해 침착해 from copy import deepcopy N=int(input()) P=list(map(int,input().split())) S=list(map(int,input().split())) #카드덱 dq=[i for i in range(N)] #현재 플레이어상태 player=[[] for i in range(3)] for i in range(N): p=i%3 player[p].append(i) ini=deepcopy(player) #목표값 target=[[] for i in range(3)] for i in range(N): target[..

알고리즘/구현 2020.10.15

sigmoid function(softmax function)과 logit function

0. 서론확률을 input으로 받았을 때 적절한 y값을만들어 주는 logit function에 대해서 알아보았다(sosoeasy.tistory.com/352)그렇다면 logit값을 입력으로 받았을 때 이를 확률로 바꿔주는 sigmoid(label이 3개이상일때는 softmax)에 대해서 알아본다. 1. logit의 함수는 아래와 같다   2. logit 함수로 부터 sigmoid함수를 역함수 형태로 유도할 수 있다   즉 각각의 함수의 역할은 다음과 같다   3. softmax는 여러 lable이 있을때 쓰는 활성함수. 분모가 달라진다   4. DNN에서의 흐름output layer의 결과값을 logit으로 생각하면, 이 logit을 sigmoid( softmax )함수에 적용하면 결과값으로 확률이 나온..

[백준]10836 여왕벌 #그리디#격자

1. 풀이 제일왼쪽열, 제일 위쪽 행의 값이 주어지고, 다른 자리는 왼,왼위,위 중 가장 큰 수가 들어오면 되는 조건을 보면 아래와 같은 점화식이 만들어진다. L[i][j]=max(L[i-1][j],L[i-1][j-1],L[i][j-1]) 위의 점화식을 만든것 만으로 뭔가 대단한걸 생각해낸 것 같아서 정답인줄 알았지만 시간초과이다. (N=1,000,000) 핵심은 주어지는 왼쪽열, 위쪽행의 값들이 순차적으로 커진다는 것이다. 즉 점화식의 결과는 반드시 아래와 같아진다는 것이다. max(L[i-1][j],L[i-1][j-1],L[i][j-1])=L[i-1][j] 그러니까 0열을 제외한, 즉 1열보다 뒤에 있는 모든 행들은 0행의 값들을 그대로 받을 수 밖에 없다. 따라서 0열과 0행을 다 누적해서 더해주고..

알고리즘/수학 2020.10.13

binary cross entropy의 의미

0. 설명로지스틱회귀에서 사용하는 loss function인 binary cross entropy가 어떻게 만들어졌는지 살펴본다 1. loss function의 의미loss function은 우리가 원하는값이 나오면 작은값이 나와야 하고, 우리가 원하지 않은 값이 나오면 커야 한다.즉 결과값이 0이 나와야 하는데 1이나오면 loss는 커져야 하고, 0이 나오면 loss는 작아져야 한다.이를 식으로 나타내면 아래와 같다. 2. log함수그런 역할을 해주는 식이 log함수이다. 식은 아래와 같다즉 label이 0이면 0에 가까워질수록 작아지고, 1에 가까워질수록 커지는 -log(1-x)를 loss function으로 쓰고label이 1이면 1에가까워질수록  작아지고, 0에 가까워질수록 커지는 -log(x)를..

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보다 작은값이 계속해서 곱해지게 된다.이러면 기울기가 무한히 작아지는 현상이 발생하며 이 현상을 grad..

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

1. 데이터 다운(1) 데이터 다운nltk.download()import pandas as pdimport urllib.requesturllib.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_text : 뉴스 ..

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

위키독스 교재에 있는 주제추출 알고리즘 LSA실습을 진행해본다wikidocs.net/307081. 데이터 추출뉴스기사 11314건을 사용한다.(1) 필요한 라이브러리 다운import pandas as pdfrom sklearn.datasets import fetch_20newsgroupsdataset = fetch_20newsgroups(shuffle=True, random_state=1, remove=('headers', 'footers', 'quotes'))documents = dataset.datalen(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의 아래쪽은 모두 비어있음 맨오른쪽은 파스크행 이라고 하여 데이터의 완전성을 나타낸다고 함 (정확히 뭔지 잘모르겠음..)