반응형

맥북 m1을 사고 jdk 1.8.0_291 설치 후 eclipse설치 중 failed to create java virtual machine 에러 메세지가 발생했습니다. 

 

추측하기로는 jdk 8버전과 호환되는 eclipse2020-03, 2020-06은 m1과 호환되지 않다고 생각합니다.

 

따라서 우선 기존의 jdk를 삭제했습니다.

터미널에서 아래의 명령어를 입력하면 됩니다.

sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefPane
sudo rm -fr ~/Library/Application\ Support/Oracle/Java

cd /Library/java/JavaVirtualMachines
sudo rm -rf jdk버전

 

다음

1. jdk 11(LTS) 설치(https://www.oracle.com/java/technologies/javase-downloads.html)

2. eclipse 2020-09 버전 설치 (https://www.eclipse.org/downloads/packages/release/2020-09/r)

 

다음과 같이 eclipse사용 및 jdk호환이 되었습니다.

이만 마치겠습니다.

반응형
반응형

캐글 노트북 필사 첫번째 대회는 Cassava Leaf Disease Classification입니다. 이 대회의 목적은 아프리카에서 두 번째로 큰 탄수화물 카사바에 발생하는 질병을 식별하여, 감염된 식물을 태워 확산을 방지하고, 식량 공급에 문제를 해결하기 위함입니다. Image competition이며, 이번 대회에서 가장 많은 vote를 받은 Notebook부터 필사 하도록 하겠습니다. 

 

필사커널링크 : www.kaggle.com/ihelon/cassava-leaf-disease-exploratory-data-analysis

 

Cassava Leaf Disease - Exploratory Data Analysis

Explore and run machine learning code with Kaggle Notebooks | Using data from Cassava Leaf Disease Classification

www.kaggle.com

 

4개의 질병과 1개의 정상 labels 총 5개의 labels가 존재합니다.

 

 

이미지의 갯수는 21,397, 픽셀 사이즈는 600 x 800

 

각 class의 비율을 그림을 통해 보여줍니다.

 

랜덤 샘플을 통한 시각화

 

클래스 별 시각화
albumentations image agumentation 1
albumentations image agumentation 2

 

augmentation 1,2 compose를 통해 동시적용

 

이번 대회의 평가지표는 AUC, 따라서 이러한 불균형 클래스를 가질경우 높은 빈도(3)로 예측하여도 약 60%의 AUC를 얻을 수 있습니다.

반응형

'competition' 카테고리의 다른 글

DACON - 전력사용량 예측 AI 경진대회(8th)  (0) 2021.07.10
DACON - 천체 유형 분류대회 후기(3th)  (0) 2020.05.02
14th solution - 9%  (0) 2019.11.07
Pseudo Labelling  (0) 2019.11.06
Compare optimizer of efficientNet  (2) 2019.11.06
반응형

split는 strings objects를 input으로 받기 때문에 list가 들어오는 순간 에러를 발생합니다..

text = ['아버지 가방에 들어가신다']
text.split(" ")
#AttributeError: 'list' object has no attribute 'split'

 

 

리스트 안에 str값을 넣어줘야 split가 작동합니다.

text = ['아버지 가방에 들어가신다']
text[0].split(" ")
#['아버지', '가방에', '들어가신다']

 

 

output 값이 ['아버지', '가방에', '들어가신다'] 이렇게 나온 것을 볼 수 있습니다.

분리된 값이 리스트 안에 요소로 들어가 있습니다. 그렇다면 원상태로 되돌리려면 어떻게해야할까요?

#output 리스트 벗기기
text = ['아버지', '가방에', '들어가신다']
" ".join(text)
#'아버지 가방에 들어가신다'

 

반응형
반응형
soyspacing
  • 참조 : https://github.com/lovit/soynlp

  • 카카오에서 공개한 khaiii의 경우 뛰어난 성능을 보이지만 띄어쓰기가 잘 되어있지 않으면 성능이 좋지 않습니다. 그래서 lovit님이 공개한 soynlp의 soyspacing을 wikipedia 문서를 통해 학습하려고 합니다.

  • 데이터셋은 한국어임베딩 github에서 다운받았습니다.

Library

In [91]:
!pip install soyspacing
Looking in indexes: http://ftp.daumkakao.com/pypi/simple
Requirement already satisfied: soyspacing in /home/ubuntu/anaconda3/envs/tg_python3/lib/python3.6/site-packages (1.0.17)
Requirement already satisfied: numpy>=1.12.0 in /home/ubuntu/anaconda3/envs/tg_python3/lib/python3.6/site-packages (from soyspacing) (1.18.3)
WARNING: You are using pip version 20.0.2; however, version 20.1 is available.
You should consider upgrading via the '/home/ubuntu/anaconda3/envs/tg_python3/bin/python -m pip install --upgrade pip' command.
In [93]:
from tqdm import tqdm_notebook
import pandas as pd
from soyspacing.countbase import CountSpace

Data Load

In [54]:
wiki= []

with open("/home/ubuntu/dataset/processed/processed_wiki_ko.txt", 'r') as f:
    for s in tqdm_notebook(f):
        wiki.append(s)

wiki = pd.Series(wiki).map(lambda x: x.replace("\\n", " "))
/home/ubuntu/anaconda3/envs/tg_python3/lib/python3.6/site-packages/ipykernel/__main__.py:4: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0
Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`

Data Write

In [55]:
# 50000건의 wiki 데이터를 text파일로 저장
with open("wiki.txt", 'w') as output:
    for row in wiki:
        output.write(str(row) )

Train

In [56]:
# soyspacing 학습(wiki문서 약31만건)
from soyspacing.countbase import CountSpace
corpus_fname = 'wiki.txt'
model = CountSpace()
model.train(corpus_fname)
all tags length = 21121548 --> 19479615, (num_doc = 311236)

Model Save and Load

In [ ]:
#Model save
model_fname = 'space-correct_wiki.model'
model.save_model(model_fname, json_format=False)

#model Loac
model_fname = 'space-correct_wiki.model'
model = CountSpace()
model.load_model(model_fname, json_format=False)

Evaluate

In [107]:
text = ['아버지가방에들어가신다', '고양이가죽을먹는다', '문재인대통령이연설을시작했다', '현대자동차투싼슈퍼카닷컴']
for n in text:
    print(model.correct(n)[0])
아버지가 방에 들어가신다
고양이가 죽을 먹는다
문재인 대통령이 연설을 시작했다
현대자동차 투싼슈퍼카닷컴
In [111]:
text = ['철구가의자에앉았다', '손나은은청순가련멋쟁이', '오늘저녁은뼈숯불구이다!']
for n in text:
    print(model.correct(n)[0])
철구가의 자에 앉았다
손나은은청순가련멋쟁이
오늘 저녁은뼈숯불구이다!
  • 아래 문장은 일부로 어려운 문장을 넣어봤습니다.
  • 모든 모델이 완벽하지는 않다고 생각하며, khaiii와 함께 사용시 좋아지지않을까? 하는 생각입니다.
In [115]:
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:90% !important;}</style>"))
반응형

'데이터분석 > NLP' 카테고리의 다른 글

[NLP] Python WordCloud 그리기  (0) 2021.11.21
[Keras] RNN 내부동작 알아보기  (0) 2021.08.05
[Keras] Embedding에 대해 알아보자.  (3) 2021.08.05
반응형

저는 숫자 자체를 문자열로 취급하여 Word2vec를 돌리기 위해 리스트 안의 숫자들을 문자로 변경할 필요가 있었습니다.

리스트 안에 문자열 생성
a = ['1233113', '21424214', '14514214', '3213123']
a
# ['1233113', '21424214', '14514214', '3213123']


리스트 안에 문자를 숫자로 변경
a = list(map(int, a))
a
# [1233113, 21424214, 14514214, 3213123]


리스트 안에 숫자를 문자로 변경
a = list(map(str, a))
a
# ['1233113', '21424214', '14514214', '3213123']

 

반응형
반응형

- Adjusted Rand index

Clustering 평가 방법인 Adjusted Rand index에 대해 알아보겠습니다. ARI의 경우 타깃값을 아는 경우에 쓰이는 방법인 것을 다시한번 말씀드립니다.

 

저번에 포스팅한 Rand index에 대해 보고 오시는걸 추천 드립니다.

또한, wikipedia에 자세한 설명이 나와 있습니다.


- Adjusted Rand index 수식 

contingency table이 있을 때 

ARI는 다음과 같이 계산할 수 있습니다.

Adjusted Rand index 수식은 크게 보면 총 4가지로 나타낼 수 있습니다.

 

아래 예시를 통해 이해해보겠습니다.

 

 


- Adjusted Rand index  예시

 

앞서 Rand index에서 사용한 예시를 가져와 수식을 알아보겠습니다.

 

저와 친구 4명이 있었습니다. [태구, 영수, 영희, 철수, 동우] 저희는 새학기를 맞아 새로운 반을 배정받았는데

1반 : 태구, 2반 : 영수, 영희, 3반 :철수 동우로 배정받았습니다. [1, 2, 2, 3, 3]

 

사실 저와 친구들은 반 배정 전 누가 같은반이 될까 내기를 한적이 있습니다. 그 중 제가 예상한 결과는 

1반 : 태구, 영수 2반 : 영희, 철수, 동우였습니다. [1, 1, 2, 2, 2]

 

그렇다면 반배치 결과(타깃값)와 저의 예상을  ARI로 계산해보겠습니다.

우선 contingency table을 만들어 보겠습니다. X와 Y는 클러스터 입니다. 

 

X - 태구 예측 클러스터 = [1, 1, 2, 2, 2]

Y = 반배정(타깃값)     = [1, 2, 2, 3, 3]

 

우선 contingency table을 만들겠습니다.

X / Y Y1 Y2 Y3 sums
X1 1 1 0 2
X2 0 1 2 3
sums 1 2 2  

Y1,Y2,Y3에 비해 X1,X2만 있는 이유는 태구 예측 클러스터에 군집이 1과2밖에 없기 때문입니다.

 

X클러스터에서 태구를 1반으로 예측하였고 Y클러스터의 태구또한 1반 이므로 X1 / Y1  = 1입니다.

또한, 영수를 1반으로 예측하였지만, Y클러스터의 영수는 2반이기 때문에 X1 / Y2 = 1입니다. 

 

예를들어 Y클러스의 영수 또한 1반으로 배정되었다면 X1 / Y1 = 2 입니다.

이제 contingency table을 직접 만들 수 있겠죠?

 

그럼 이제 ARI 값을 구해 보겠습니다.

nij의 경우는 각표에 할당된 값이며, ai의 경우 행의 합 bj의 경우 열의 합입니다. 표를 통해 해당값을 구하게 되면 아래와 같습니다.

,

최종적인 ARI값 : 


- Python을 이용한 ARI 계산

파이썬 사이킷런 라이브러리를 이용하면 쉽게 ARI결과를 예측할 수 있습니다. 

위의 계산과 같은 값이 나왔네요!

 


- ARI에 대한 생각

기존에 같은 예시를 통해 Rand index값을 구했을 경우는 0.6으로 높은값이 나왔지만 ARI는 0.09로 나왔습니다. 

ARI가 0일 경우 무작위할당과 같은 수치이며, 0.2이하의 점수는 좋지않은 성능을 나타낸나고 합니다. 

 

Rand index는 예측 군집수가 많아질 수록 클러스터 내에 군집되지 않는 pair가 많아지면서 성능이 높아지는 단점이 있었습니다. 그러나 Adjusted Rand index의 경우 위의 예시와 같이 모든 경우(클러스터 수 )에 대해 고려되기 때문에 점수에 대한 신뢰성이 높아진다고 생각합니다. 

반응형

'통계' 카테고리의 다른 글

Rand index란?  (2) 2020.05.08
통계개념  (0) 2019.11.18
통계에서 사용되는 bootstrap의 의미는 무엇인가요  (0) 2019.11.15
ROC curve?  (0) 2019.11.09
혼돈행렬(confusion matrix)에 대해 알아보자  (2) 2019.11.07
반응형

- Rand index

clustering 평가방법을 알아보던 중 adjusted rand index란 평가방법이 있어 알아보려고 합니다. adjusted rand index는 클러스터의 타깃값을 아는 경우에 사용하는 평가방법입니다.

 

우선 adjusted rand index를 알아보기 전 Rand index에 대해 이해한 부분을 쉽게 설명해보려 합니다.

 

우선 아래 그림은 Rand index의 수식입니다. 

a는 뭐고 b는 뭐고 아래 ()은 무엇이지? 라는 생각이 들겁니다. 하나하나 예시를 들어보겠습니다.

출처 : 위키피디아


- Rand index 수식

첫 번째. 우선 분모에 있는 조합부터 보겠습니다. 아래 분모는 순서가 정해져있지 않은 두개의 쌍을 의미 합니다. 

출처 : 위키피디아

저를 포함한 친구4명 - 태구, 영수, 영희, 철수, 동우를 2명씩 순서 상관없이 짝을 지어보겠습니다.

 

(태구-영수), (태구-영희), (태구-철수), (태구-동우), (영수-영희), (영수-철수), (영수-동우), (영희-철수), (영희-동우), (철수-동우)

 

5(5-1)/2= 총 10쌍이 나옵니다.

 

두 번째. a는 두개의 클러스터가 있을 때 두 클러스터 내에서 동일하게 짝지어진 쌍을 의미합니다.

 

세 번째. b는 두개의 클러스터가 있을 때 두 클러스터 내에서 동일하게 짝지어지 않은 쌍을 의미합니다.

 

 

아래 예시를 들어보겠습니다. 예시를 보면 위의 개념을 이해할 수 있습니다.

 


- Rand index 예시

첫번 째 예시에서 저와 친구 4명이 있었습니다. [태구, 영수, 영희, 철수, 동우]

저희는 새학기를 맞아 새로운 반을 배정받았는데

1반 : 태구, 2반 : 영수, 영희, 3반 :철수 동우로 배정받았습니다. [1, 2, 2, 3, 3]

 

사실 저와 친구들을 반 배정 전 누가 같은반이 될까 내기를 한적이 있습니다. 그 중 제가 예상한 결과는 

1반 : 태구, 영수 2반 : 영희, 철수, 동우였습니다. [1, 1, 2, 2, 2]

 

그렇다면 반배치 결과(타깃값)와 저의 예상을 Rand index로 계산해보겠습니다.

 

분모 -  5명이 순서를 이루지 않는 쌍이기 때문에 5(5-1) / 2 = 10입니다.

 

a - 두 클러스터 내에서 동일하게 같은반인 친구는 누구일까요?

(철수, 동우)입니다. 

 

b - 두 클러스터 내에서 동일하게 같은반이 아닌 친구는 누구일까요?

(태구, 영희) (태구 ,철수) (태구 동우) (영수, 철수) (영수 동우) 입니다. 

 

이제 Rand index를 구해보면


- Rand index 한계

Rand index는 클러스터링 평가방법에서 잘 사용되지 않습니다. 그이유는 클러스터의 수가 많아지게 되면 앞선 수식에서 b, 두 데이터가 서로 다른 클러스터에 속할 확률이 높아지기 때문입니다. 이로 인해 클러스터 수가 많아지면 rand index도 높은 값을 갖습니다.

 

dbscan 클러스터링은 cluster의 수를 설정할 수가 없기 때문에 많은 클러스터가 생기며 이러한 경우 rand index는 정확한 평가방법이 아닙니다. 

 

다음은 rand index의 단점을 고친 adjusted rand index에 대해 알아보겠습니다. 감사합니다.

 

 

 

반응형

'통계' 카테고리의 다른 글

ARI(Adjusted Rand index)  (2) 2020.05.08
통계개념  (0) 2019.11.18
통계에서 사용되는 bootstrap의 의미는 무엇인가요  (0) 2019.11.15
ROC curve?  (0) 2019.11.09
혼돈행렬(confusion matrix)에 대해 알아보자  (2) 2019.11.07
반응형

 

국내 데이터분석 대회는 2017년 빅콘테스트 이후로 처음인 것 같습니다.

 

취업을 핑계로 미루다 이번에 DACON에서 진행한 천체 유형 분류대회에 참가했습니다.

 

역시 리더보드를 통해 순위를 올리는 쾌감은 롤 승급전 승리 만큼이나 짜릿한 것 같습니다. 

 

다시한번 기본기에 대해 공부가 필요하다는 것을 절실히 느꼇으며, 항상 대회를 혼자 진행하다 보니 아이디어의 한계를 느꼇으며 특히나 엄청 외롭습니다...

 

또한, 대회가 끝나갈 수록 정답제출 기회가 적어지면서 조금만 더 일찍 부지런히 시도해볼걸 하는 아쉬움이 남습니다.

 

조금 더 자세한 후기와 코드는 아래 남기며 다시한번 좋은 대회 열어주신 DACON에 감사드립니다. 

 

대회후기 : https://dacon.io/more/interview/87

코드 : https://dacon.io/competitions/official/235573/codeshare/694?page=1&dtype=recent

 

반응형

'competition' 카테고리의 다른 글

DACON - 전력사용량 예측 AI 경진대회(8th)  (0) 2021.07.10
[1st] Cassava Leaf Disease Classification -EDA  (0) 2021.01.10
14th solution - 9%  (0) 2019.11.07
Pseudo Labelling  (0) 2019.11.06
Compare optimizer of efficientNet  (2) 2019.11.06

+ Recent posts