본문 바로가기
Team Project/지구별

2020.02.10~2020.02.23 회의록 및 스터디

by 노이지 2020. 3. 1.

백엔드

  1. 지난주에 못한 뉴스 크롤링을 마무리하였다.

  2. 웹 페이지에 보여줄 키워드 선택을 위해 필요한 코사인 유사도에 대해 공부하고 추천 시스템을 구현해보았다. (https://wikidocs.net/24603)

  3. node.js에서 mysql을 사용해보았다. (https://medium.com/wasd/node-js%EC%97%90%EC%84%9C-mysql-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-1-b4b69ce7433f)

코사인 유사도 계산

from numpy import dot
from numpy.linalg import norm
import numpy as np
def cos_sim(A,B):
    return dot(A,B)/(norm(A)*norm(B))

doc1 = np.array([0,1,1,1])
doc2 = np.array([1,0,1,1])
doc3 = np.array([2,0,2,2])

print(cos_sim(doc1,doc2))
print(cos_sim(doc1,doc3))
print(cos_sim(doc2,doc3))

 

추천 시스템 구현

import pandas as pd
data = pd.read_csv(r'C:\Users\USER\Desktop\movies_metadata.csv',low_memory=False)
data = data.head(20000)

# print(data['overview'].isnull().sum())
data['overview'] = data['overview'].fillna('')
# print(data['overview'].isnull().sum())

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(stop_words='english')
tfidf_matrix = tfidf.fit_transform(data['overview'])

print(tfidf_matrix.shape)

from sklearn.metrics.pairwise import linear_kernel
cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)

indices = pd.Series(data.index, index=data['title']).drop_duplicates()
print(indices.head())

idx = indices['Father of the Bride Part II']
print(idx)

def get_recommendations(title, cosine_sim=cosine_sim):
    idx = indices[title]
    sim_scores = list(enumerate(cosine_sim[idx]))
    sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
    sim_scores = sim_scores[1:11]
    movie_indices = [i[0] for i in sim_scores]
    return data['title'].iloc[movie_indices]

print(get_recommendations('The Dark Knight Rises'))

 

node js에서 mysql 사용하기. 사용에 어려움을 느껴서 mongoDB로 다시 해보기로 했다.

var mysql = require('mysql'); // mysql 모듈 불러오기
var connection = mysql.createConnection({
    host: 'localhost', // 호스트 주소
    user: 'me', // mysql user
    password: 'secret', // mysql password
    database: 'my_db' // mysql 데이터베이스
}); // 연결할 때 사용되는 정보를 담고 있음

connection.connect(); // mysql에 연결

// query를 통해 실제 데이터베이스의 값을 다룸
connection.query('SELECT 1 + 1 AS solution',
function (error, results, fields){
    if(error) throw error;

    // results는 query문을 실행한 결과를 return
    // 값의 타입이 배열로 들어가고, column은 JSON 방식
    console.log(results); // [ RowDataPacket { solution: 2 } ]
    // RowDataPacket ??
    console.log('The solution is: ', results[0].solution);
});

connection.end(); // mysql 연결 끊기

 

- 다음주까지 목표: node.js 복습, mongoDB 사용해보기

 

프론드엔드

- 하경

javascript + react 강의 반복 복습 진행

+ 자연어 처리 스터디 : NER(개체명 인식), 문장에서 키워드 뽑는 방법 공부 중

[기타 자연어 처리 공부하면서 참고한 사이트]

https://keras.io/ #keras official

다중분류를 위한 손실함수(dataparallel 관해서) 참고 사이트 ↓ https://visdap.blogspot.com/2018/12/pytorch-inputs-for-nncrossentropyloss.html http://www.gisdeveloper.co.kr/?p=8668 : cross_entropy_loss = torch.nn.CrossEntropyLoss() 를 쓰는 것을 권장

pytorch package 정보 https://9bow.github.io/PyTorch-tutorials-kr-0.3.1/beginner/pytorch_with_examples.html https://tutorials.pytorch.kr/beginner/blitz/neural_networks_tutorial.html https://datascienceschool.net/view-notebook/4f3606fd839f4320a4120a56eec1e228/ autograd (텐서의 연산에 대해 자동으로 미분값을 구해주는 기능) https://pytorch.org/docs/stable/autograd.html y.backward() 사용 → 미분값을 자동으로 갱신 https://datascienceschool.net/view-notebook/015e478dc26e4a5c9ef204673b61bcd6/ loss plot https://seongkyun.github.io/others/2019/05/11/pytorch_tensorboard/

 

- 주혜 딥러닝 스터디 lec01~10

Lec10

input layer-hiddend layer-output layer

layer가 많아질수록 (계산이 곱으로 이루어져 있기 때문에) 오차가 커질 수 있다

-> sigmoid는 값이 1보다 작거나 크기 때문에 곱했을 때 값의 변화가 있다

이를 보완하기 위하여 ReLu 함수를 사용 (마지막에는 출력해야하는 값이 0과 1사이이므로 sigmoid 사용)

overfitting? : training dataset에서는 정확도가 1에 수렴하지만 test dataset에 대해서는 정확도가 급격히 떨어질 때.

overfitting의 solution 중 하나로 dropout : 학습할 때 몇 개의 neuron을 ramdom하게 선택하여 비활성화 *dropout은 학습할 때만 사용한다.

dropout_rate = tf.placeholder(“float”) # 학습에 비활성화할 뉴런의 비율

_L1 = tf.nn.relu(tf.add(tf.matmul(X, W1), B1)

L1 = tf.nn.dropout(_L1, dropout_rate)

sess.run(optimizer, feed_dict={X: batch_xs, Y: batch_ys, dropout_rate: 0.7})

ensemble : 각 trainset을 독립적으로 생각하여 learning model을 구축하고 마지막에 그것을 합치는 방법

 

댓글