PolynomialFeatures()
를 사용해서 feature 수가 105개 됐을 때 Linear Regression으로 학습 및 예측한 것에 대한 를 구하면 40%대와 80%대로 월등히 차이난다.PolynomialFeatures()
를 사용해도 결정계수 값이 비슷해진다.PolynomialFeatures()
이용, 그냥 변수별 설명력이 중요하면 간단한 첫번째 데이터셋을 이용하는 게 좋단다.텍스트 감성 분석(Sentiment Analysis)의 중요 포인트
텍스트 분석 알면 알수록 심오하고, 재미있는 것 같다.
워드 임베딩
아래의 문장은 제너레이터를 만든다.
invalid syntax
오류가 난다.# 숫자 벡터로 encode된 문장을 원래대로 decode하는 함수입니다.
def get_decoded_sentence(encoded_sentence, index_to_word):
return ' '.join(index_to_word[index] if index in index_to_word else '<UNK>' for index in encoded_sentence[1:]) #[1:]를 통해 <BOS>를 제외
print(get_decoded_sentence([1, 3, 4, 5], index_to_word))
i if i % 2 == 0 else i+10 for i in [1,2,3,4,5]
>>>SyntaxError: invalid syntax
print(i if i % 2 == 0 else i+10 for i in [1,2,3,4,5])
>>><generator object <genexpr> at 0x7f14177228d0>
시퀀스 데이터(Sequence data)
: 사실 음성이 더 맞긴함
RNN은 state machine으로 설계됨
하나의 동일한 time-step의 데이터(혹은 데이터셋?)에 연관되는 가중치 w는 같다.(그래서 x -> RNN -> y
)라고 단순하게 표현한다.
꼭 RNN이어야 할까?
답을 하자면, 1-D Convolution Neural Network(1-D CNN)를 사용할 수도 있다.
이미지는 2-D CNN을 했는데, 문장은 1차원(단어를 여러 요소로 갖는)으로 해서 넣을 수도 있다.
이러면 그 벡터를 스캐닝하면서 특징을 추출한다.
그리고 병렬처리에 RNN보다 더 효율적이라 빠르다.
vocab_size = 10000
word_vector_dim = 32
model = tf.keras.Sequential()
model.add(tf.keras.layers.Embedding(vocab_size, word_vector_dim, input_shape=(None,)))
model.add(tf.keras.layers.LSTM(8?????))
word_vector_dim
은 4였고, LSTM에는'8'이 써있길래 달라도 되나 싶어서 찾아봤는데, 아래의 경우가 있었다.embedding_dim = 100
hidden_units = 128
model = Sequential()
model.add(Embedding(vocab_size, embedding_dim))
model.add(LSTM(hidden_units))
fit()
을 계속 하면 계속 학습하는 거란다...1) 그래도 word2vec에서 word->integer->vector가 되는 구조를 조금이나마 이해하게 됐다.