Skip to content

[Project๐Ÿ—‚] ๊ตญ๊ฐ€์ˆ˜๋ฆฌ๊ณผํ•™ ์—ฐ๊ตฌ์†Œ ์ฃผ๊ด€ 2019 ์‚ฐ์—…์ˆ˜ํ•™ ์„ธ๋ฏธ๋‚˜, ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ๋ฅผ ์ด์šฉํ•œ ML ๋ฐ ์‹œ๊ฐํ™”

Notifications You must be signed in to change notification settings

parkjisu6239/2019_NIMS

Repository files navigation

์ž์—ฐ์–ด ์ฒ˜๋ฆฌ ๋ฐ ๊ฐ์ • ๋ถ„์„

2019.08 / 2019 ๊ตญ๊ฐ€ ์ˆ˜๋ฆฌ๊ณผํ•™ ์—ฐ๊ตฌ์†Œ ์‚ฐ์—…์ˆ˜ํ•™ ์„ธ๋ฏธ๋‚˜

๋ถ„์„ ๋ชจ๋ธ : https://bit.ly/3wFVACJ

์‹œ๊ฐํ™” : https://bit.ly/3vArvDf

๋ชฉ์ 

  • ๋„ค์ด๋ฒ„ ์˜ํ™” ๋Œ“๊ธ€ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ๊ธ์ • ๋ถ€์ • ์˜ˆ์ธก ๋ชจ๋ธ ๊ฐœ๋ฐœ
  • ๊ธ์ •, ๋ถ€์ •์–ด๋ฅผ ํ†ตํ•ด ์˜ํ™” ์ œ์ž‘ ๋ฐ ๋งˆ์ผ€ํŒ…์—์„œ ํ™œ์šฉํ•œ ์ฐธ๊ณ  ์ž๋ฃŒ๋กœ์„œ ํ™œ์šฉ ๊ฐ€๋Šฅ

๊ฐœ์š”

  1. ML
    • step1. ๋„ค์ด๋ฒ„ ์˜ํ™” ๋ฉ”์ธ ํŽ˜์ด์ง€(ํ˜„์žฌ ์ƒ์˜์ž‘) ์—์„œ 1~10์œ„ ์˜ํ™”์˜ ์ƒ์„ธํŽ˜์ด์ง€ ์ฃผ์†Œ ํฌ๋กค๋ง
    • step2. ์ƒ์„ธํŽ˜์ด์ง€์—์„œ ํ‰์ ์˜ ๋”๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ๋ณด์—ฌ์ง€๋Š” ํŽ˜์ด์ง€ ์ฃผ์†Œ ํฌ๋กค๋ง
    • step3. 140์ž ํ‰์„ 1ํŽ˜์ด์ง€~๋ ํŽ˜์ด์ง€ ์ˆœํšŒํ•˜๋ฉด์„œ ํ‰์ ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ํฌ๋กค๋ง
    • step4. ํ•™์Šต์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ
    • step5. ํ•™์Šต. ํ•™์Šต๋œ ๋ชจ๋ธ์„ ํŒŒ์ผ๋กœ ์ €์žฅ
    • step6. ์ €์žฅ๋œ ๋ชจ๋ธ์„ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉ
  2. ์‹œ๊ฐํ™”
    • step1. ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์Šค์ฝ”์–ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ธ์ •,๋ถ€์ • ๋ฆฌ๋ทฐ๋ฅผ ๋‚˜๋ˆ”
    • step2. ๋‚˜๋ˆ„์–ด์ง„ ๋ฆฌ๋ทฐ๋ฐ์ดํ„ฐ๋ฅผ ํ˜•ํƒœ์„œ ๋ถ„์„ํ•˜์—ฌ ๋ช…์‚ฌ๋ฅผ ํ† ํฐํ™”ํ•œ๋‹ค.
    • step3. ํ† ํฐํ™” ๋œ ๋ช…์‚ฌ์ค‘์—์„œ ์ž์ฃผ ๋‚˜์˜ค๋Š” 50๊ฐœ์˜ ๋‹จ์–ด๋ฅผ ํ™•์ธ
    • step4. ํ•ด๋‹น ๋‹จ์–ด์˜ ๋นˆ๋„์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ฐจํŠธ ์ƒ์„ฑ
    • step5. ์ž์ฃผ ๋‚˜์˜ค๋Š” 500๊ฐœ์˜ ๋‹จ์–ด๋กœ ์›Œ๋“œ ํด๋ผ์šฐ๋“œ ์ƒ์„ฑ

์ƒ์„ธ ๋‚ด์šฉ_๊ธ/๋ถ€์ •์–ด ๋ถ„๋ฅ˜ ๋ชจ๋ธ(ML)

์ „์ฒด ์ฝ”๋“œ ๋‚ด์šฉ์€ html ํŒŒ์ผ, pdf๋กœ ํ™•์ธ ๊ฐ€๋Šฅ

1. ์ฃผ์†Œ, ๋Œ“๊ธ€, ๋ณ„์  ํฌ๋กค๋ง

def step1_get_detail_url() :
    # ์ ‘์†ํ•  ํŽ˜์ด์ง€์˜ ์ฃผ์†Œ ๋„ค์ด๋ฒ„ ์˜ํ™” ๋ฉ”์ธ ํŽ˜์ด์ง€
    site = 'https://movie.naver.com/movie/running/current.nhn?order=reserve'

    # requests๋ฅผ ์ด์šฉํ•ด ํ•ด๋‹น URL์— ์ ‘์†ํ•œ๋‹ค
    response = requests.get(site)   

    # ์˜ํ™” ํŽ˜์ด์ง€๋ฅผ ํฌ๋กค๋งํ•œ๋‹ค
    bs = BeautifulSoup(response.content, 'html.parser')

    # a ํƒœ๊ทธ๋“ค์„ ๊ฐ€์ ธ์˜จ๋‹ค.
    a_list = bs.select('.top_thumb_lst a')

    # href ์†์„ฑ์„ ๊ฐ€์ ธ์˜จ๋‹ค.
    df = pd.DataFrame()
    for idx in range(10) :       # ์ƒ์œ„ 10๊ฐœ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ
        href = a_list[idx].get('href')
        
        # ๊ฐ€์ ธ์˜จ href ์†์„ฑ์˜ ์ฃผ์†Œ๋ฅผ ๋ถ„์„ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
        a1 = parse.urlparse(href)
        
        # ์ฃผ์†Œ๋ฅผ ๋ถ„์„ํ•œ ๊ฐ์ฒด์„œ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ๊ฐ€์ ธ์˜จ๋‹ค(? ์ดํ›„)
        query_str = parse.parse_qs(a1.query)
        
        # ์ถ”์ถœํ•œ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง ๋ฐ์ดํ„ฐ์—์„œ ์›ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•œ๋‹ค.
        code = query_str['code'][0]
        print(code)

        df = df.append([[code]], ignore_index=True)

    df.columns = ['code'] #์ถ”์ถœํ•œ 10๊ฐœ ์˜ํ™” ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•œ๋‹ค.
    df.to_csv('movie_code_list.csv', index=False, encoding='utf-8-sig') #์ฝ”๋“œ๋ฅผ CSV๋กœ ์ €์žฅ
    print('์ฃผ์†Œ ์ €์žฅ ์™„๋ฃŒ')
step1_get_detail_url()

2. ํ‰์  ์ „์ฒ˜๋ฆฌ

  • ๋Œ€๋ถ€๋ถ„ ํ‰์ ์„ ํ›„ํ•˜๊ฒŒ ์ฃผ๋Š” ๊ฒฝํ–ฅ์žˆ๊ณ , ํ‰์  ํ‰๊ท ์ด ์šฐ์ธก์— ํŽธํ–ฅ๋˜์–ด ์žˆ์–ด์„œ 7์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ€์ •์  ๋ฆฌ๋ทฐ, ๊ธ์ •์  ๋ฆฌ๋ทฐ๋กœ ํŒ๋‹จ
# 140์žํ‰ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ํ•จ์ˆ˜
def text_preprocessing(text) :
    if text.startswith('๊ด€๋žŒ๊ฐ') :
        return text[3:]
    else :
        return text
    
# ํ‰์  ์ „์ฒ˜๋ฆฌ ํ•จ์ˆ˜
def star_preprocessing(text) :
    value = int(text)

    if value <= 7 :
        return '0'
    else :
        return '1'

3. ๋ชจ๋ธ ํ•™์Šต

  • 70%๋Š” ํ•™์Šต, 30%๋Š” test data๋กœ ๋‚˜๋ˆˆ๋‹ค.
def step4_data_preprocessing() :
    # ์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜จ๋‹ค.
    df = pd.read_csv('star_score.csv')

    # ์ „์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    df['text'] = df['text'].apply(text_preprocessing)
    df['score'] = df['score'].apply(star_preprocessing)

    # ๋…๋ฆฝ๋ณ€์ˆ˜, ์ข…์†๋ณ€์ˆ˜
    text_list = df['text'].tolist()
    star_list = df['score'].tolist()

    from sklearn.model_selection import train_test_split

    # 70%๋Š” ํ•™์Šต, 30%๋Š” test
    text_train, text_test, star_train, star_test = train_test_split(text_list, star_list, test_size=0.3, random_state=0)

    return text_train, text_test, star_train, star_test

4. ํ˜•ํƒœ์†Œ ๋ถ„์„

# ํ˜•ํƒœ์†Œ ๋ถ„์„์„ ์œ„ํ•œ ํ•จ์ˆ˜
def tokenizer(text) :
    okt = Okt() # ํ•œ๊ตญ์–ด ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    return okt.morphs(text)

5. ML

  • tfidf : ์ „์ฒด ๋ฌธ์„œ ๋‚ด ํŠน์ • ๋‹จ์–ด์˜ ๋นˆ๋„์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฒกํ„ฐํ™”
  • logistic : ์„ ํ˜• ํšŒ๊ท€ ๋ถ„์„
def step5_learning(X_train, y_train, X_test, y_test):
    # ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹จ์–ด ์‚ฌ์ „์œผ๋กœ ๋งŒ๋“ค๊ณ  ๊ฐ ๋‹จ์–ด์˜ ๋นˆ๋„์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ ํ›„ ๋ฒกํ„ฐํ™” ํ•˜๋Š” ๊ฐ์ฒด ์ƒ์„ฑ
    tfidf = TfidfVectorizer(lowercase=False, tokenizer=tokenizer) 

    # ๋ฌธ์žฅ๋ณ„ ๋‚˜์˜ค๋Š” ๋‹จ์–ด์ˆ˜ ์„ธ์„œ ์ˆ˜์น˜ํ™”, ๋ฒกํ„ฐํ™”ํ•ด์„œ ํ•™์Šต์„ ์‹œํ‚จ๋‹ค. ํšŒ๊ท€๋ถ„์„ ์ด์šฉ
    logistic = LogisticRegression(C=10.0, penalty='l2', random_state=0)

    pipe = Pipeline([('vect', tfidf), ('clf', logistic)])

    # ํ•™์Šตํ•œ๋‹ค.
    pipe.fit(X_train, y_train)

    # ํ•™์Šต ์ •ํ™•๋„ ์ธก์ •
    y_pred = pipe.predict(X_test)
    print(accuracy_score(y_test, y_pred))

    # ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์ €์žฅํ•œ๋‹ค.
    with open('pipe.dat', 'wb') as fp :
        pickle.dump(pipe, fp)
        
    print('์ €์žฅ์™„๋ฃŒ')

6. ๊ฒฐ๊ณผ

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ํ…์ŠคํŠธ๊ฐ€ ๊ธ์ •์ธ์ง€ ๋ถ€์ •์ธ์ง€ ๋ถ„๋ฅ˜ํ•˜๊ณ , ๋ถ„์„ ์ •ํ™•๋„๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์žฅ์  : '๋…ธ์žผ' ๊ณผ ๊ฐ™์ด ์€์–ด, ์ค„์ž„๋ง, ์œ ํ–‰์–ด๋„ ๋ฌด๋ฆฌ ์—†์ด ๋ถ„์„์ด ๊ฐ€๋Šฅํ•˜๋‹ค
  • ๋‹จ์  : '๊ณต์งœ๋กœ ๋ณผ์ˆ˜ ์žˆ์–ด์„œ ๋ด„~~' ๋Œ“๊ธ€ ๊ฐ™์€ ๊ฒฝ์šฐ ๋ช…๋ฐฑํ•œ ๋ถ€์ •์–ด๊ฐ€ ์—†์ด '์žฌ๋ฏธ' ๋ผ๋Š” ๊ธ์ •์–ด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด์„œ ๋ถ€์ • ๋ฆฌ๋ทฐ์ž„์—๋„ ๊ธ์ •์œผ๋กœ ํŒ๋‹จ๋˜์—ˆ๋‹ค. ๋ฌธ๋งฅ์˜ ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ๊ธฐ์— ๋ถ€์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค.

image-20210619172324547

์ƒ์„ธ ๋‚ด์šฉ_๊ธ/๋ถ€์ •์–ด ์›Œ๋“œํด๋ผ์šฐ๋“œ(์‹œ๊ฐํ™”)

์ „์ฒด ์ฝ”๋“œ ๋‚ด์šฉ์€ html ํŒŒ์ผ, pdf๋กœ ํ™•์ธ ๊ฐ€๋Šฅ

1. ์Šค์ฝ”์–ด ๊ธฐ์ค€ ๊ธ/๋ถ€์ • ๋ผ๋ฒจ๋ง

  • ๋ณด๋‹ค ์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ์• ๋งคํ•œ ์ ์ˆ˜๋Š” ๋ถ„๋ฅ˜ ๋Œ€์ƒ์—์„œ ์ œ์™ธ
df1=df[df.score<5] #0~4์ ์€ ๋ถ€์ •
df2=df[df.score>7] #8~10์ ์€ ๊ธ์ •

image-20210619173007630

2. ํ˜•ํƒœ์†Œ ๋ถ„์„, ๋“ฑ์žฅ ํšŸ์ˆ˜ ์ƒ์œ„ 50๊ฐœ ๋ช…์‚ฌ ์ถ”์ถœ

pos= ''

for each_line in df2[:4000]:
    pos = pos + each_line + '\n'
     
tokens_pos = t.nouns(pos) #ํ˜•ํƒœ์†Œ ๋ถ„์„ Okt
tokens_pos[0:10]

po = nltk.Text(tokens_pos, name='์˜ํ™”')
print(len(po.tokens))
print(len(set(po.tokens)))

pos_data=po.vocab().most_common(50) # ์ตœ๋นˆ ๋‹จ์–ด
pos_data

plt.figure(figsize=(15,6))
po.plot(50)
plt.show() #๊ธ์ • ๋ฆฌ๋ทฐ์—์„œ ๋งŽ์ด ๋‚˜์˜ค๋Š” ๋‹จ์–ด

image-20210619173343793

3. ์ตœ๋นˆ ๋‹จ์–ด 500๊ฐœ๋กœ ์›Œ๋“œํด๋ผ์šฐ๋“œ ์‹œ๊ฐํ™”

  • ์›ํ•˜๋Š” ์ด๋ฏธ์ง€์˜ ๋ชจ์–‘๋Œ€๋กœ ์›Œ๋“œ ํด๋ผ์šฐ๋“œ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • ํฐํŠธ ๋ฐ ์ƒ‰์ƒ๋„ ์ปค์Šคํ…€ ๊ฐ€๋Šฅ
mask = np.array(Image.open('popcorn.png'))
from wordcloud import ImageColorGenerator
image_colors = ImageColorGenerator(mask)

image_colors

pos_data = pos.vocab().most_common(500)
# for win : font_path='c:/Windows/Fonts/malgun.ttf'
wordcloud = WordCloud(font_path='c:/Windows/Fonts/jalnan.ttf',
               relative_scaling = 0.1, mask=mask,
               background_color = 'white',
               min_font_size=1,
               max_font_size=100).generate_from_frequencies(dict(pos_data))

default_colors = wordcloud.to_array()

plt.figure(figsize=(12,12))
plt.imshow(wordcloud.recolor(color_func=image_colors), interpolation='bilinear')
plt.axis('off')
plt.show() #๊ธ์ • ์›Œ๋“œํด๋ผ์šฐ๋“œ
  • ๊ธ์ •์–ด ์›Œ๋“œ ํด๋ผ์šฐ๋“œ ๊ฒฐ๊ณผ

image-20210619173636135

  • ๋ถ€์ •์–ด ์›Œ๋“œ ํด๋ผ์šฐ๋“œ ๊ฒฐ๊ณผ

image-20210619174000174

๊ฒฐ๋ก  ๋ฐ ๋ฐฐ์šด์ 

  • ์˜ํ™” ๋Œ“๊ธ€ ๋ฐ์ดํ„ฐ๋กœ ๋ถ„์„์„ ํ•ด์„œ, ์˜ํ™” ๋Œ“๊ธ€์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์˜ ๊ฐ์ • ๋ถ„์„์—๋Š” ๋ถ€์กฑํ•œ ํ•œ๊ณ„์ ์ด ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์˜ํ™” ๋ฐ์ดํ„ฐ ์ฒ˜๋Ÿผ ํŠน์ • ๊ธฐ์ค€์— ์˜ํ•ด ๊ธ๋ถ€์ •์„ ๋ช…ํ™•ํžˆ ๋‚˜๋ˆŒ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ชจ๋ธ ํ•™์Šต์— ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋œ๋‹ค.(์˜ํ™”์—์„œ๋Š” ๋ณ„์ )
  • ๋˜ํ•œ ๊ธ์ •, ๋ถ€์ •์–ด์— ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ๋‹จ์–ด๋ฅผ ํ†ตํ•ด ํ–ฅํ›„ ์˜ํ™”๋ฅผ ์ œ์ž‘ํ•  ๋•Œ ์ฐธ๊ณ ํ•˜๊ฑฐ๋‚˜ ๋งˆ์ผ€ํŒ… ๋ฐ ํ”„๋กœ๋ชจ์…˜์„ ์ฐธ๊ณ ํ•  ๋•Œ ์†Œ๊ตฌ ํฌ์ธํŠธ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋ฐ˜๋ฉด์— ๋ถ€์ •์–ด๋กœ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ๋‹จ์–ด๋“ค์€ ๊ทธ ์š”์†Œ๋“ค์„ ์ง€์–‘ํ•˜๋ฉฐ ์˜ํ™”๋ฅผ ์ œ์ž‘ํ•˜๋Š” ๊ฒƒ๋„ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค.
  • ํฌ๋กค๋ง, ์„ ํ˜•ํšŒ๊ท€ ๋ถ„์„, ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ, ํ˜•ํƒœ์†Œ ๋ถ„์„์— ๋Œ€ํ•œ ์ „๋ฐ˜์ ์ธ ์ดํ•ด๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ๋Œ“๊ธ€ ๋ถ„์„์—์„œ ๋ช…์‚ฌ๋ฅผ ์ถ”์ถœํ•˜๋Š”๊ฒƒ์ด ์ •ํ™•ํ•  ๊ฒƒ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜์˜€์ง€๋งŒ, ์‹ค์ œ ๋Œ“๊ธ€์„ ์‚ดํŽด๋ณด๋‹ˆ ์‚ฌ์šฉ์ž์˜ ์‹ค์ œ ๊ฐ์ •๊ณผ ๊ด€๋ จ๋œ ํ˜•ํƒœ์†Œ๋Š” ๋™์‚ฌ๋‚˜, ํ˜•์šฉ์‚ฌ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ๋‹ค์Œ ๊ฐ์„ฑ๋ถ„์„์—์„œ๋Š” ๋™์‚ฌ, ํ˜•์šฉ์‚ฌ ์œ„์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.
  • ํ•œ๊ณ„์ ์œผ๋กœ๋Š”, ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋‹ค๋ณด๋‹ˆ ์˜คํƒ€๋‚˜ ์ถ•์•ฝ์–ด๋Š” ํ˜•ํƒœ์†Œ ๋ถ„์„์ด ๋ถˆ๊ฐ€ ํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ML์œผ๋กœ ๊ธ์ •๋ถ€์ •์–ด ๋ถ„๋ฅ˜๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํ˜•ํƒœ์†Œ ๋ถ„์„์— ๊ฑธ๋ฆฌ์ง€ ์•Š์•„ ๋ˆ„๋ฝ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ๊ธด๋‹ค.
  • ํ•œ๊ตญ์–ด ๊ธ๋ถ€์ • ๋‹จ์–ด ์‚ฌ์ „์ด ์žˆ๋‹ค๋ฉด ์ •ํ™•๋„๊ฐ€ ๋†’์„ ๊ฒƒ ๊ฐ™๋‹ค.

About

[Project๐Ÿ—‚] ๊ตญ๊ฐ€์ˆ˜๋ฆฌ๊ณผํ•™ ์—ฐ๊ตฌ์†Œ ์ฃผ๊ด€ 2019 ์‚ฐ์—…์ˆ˜ํ•™ ์„ธ๋ฏธ๋‚˜, ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ๋ฅผ ์ด์šฉํ•œ ML ๋ฐ ์‹œ๊ฐํ™”

Topics

Resources

Stars

Watchers

Forks