lime과 shap 실습을 위한 전처리 :: 머신 러닝 모형 해석 - mindscale
Skip to content

lime과 shap 실습을 위한 전처리

데이터를 다운받아 연다. 이 데이터는 영화평과 그 긍/부정을 표시한 것이다.

import pandas as pd
df = pd.read_csv('https://github.com/euphoris/datasets/raw/master/imdb.zip')

데이터를 분할한다.

from sklearn.model_selection import train_test_split
review_train, review_test, y_train, y_test = train_test_split(df['review'], df['sentiment'], test_size=0.2, random_state=42)

CountVectorizer를 초기화한다.

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(max_features=1000, stop_words='english')

훈련용 텍스트를 단어 문서 행렬로 바꾸고, 같은 방식으로 테스트용 텍스트도 단어 문서 행렬로 바꾼다.

x_train = cv.fit_transform(review_train)
x_test = cv.transform(review_test)

전처리된 결과를 저장한다.

import joblib
joblib.dump(
    {
        'cv': cv,
        'review_train': review_train,
        'review_test': review_test, 
        'x_train': x_train,
        'x_test': x_test,
        'y_train': y_train,
        'y_test': y_test
     },
    'tmi.pkl'
)
['tmi.pkl']

텐서플로로 텍스트의 긍/부정을 예측하는 간단한 모형을 만들어 학습시킨다.

import tensorflow as tf

model = tf.keras.Sequential([
    tf.keras.layers.Dense(1, input_shape=[1000], activation='sigmoid')                    
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(x_train.toarray(), y_train.values, validation_split=0.2, epochs=30, callbacks=[tf.keras.callbacks.EarlyStopping(monitor='val_accuracy')])

모형을 저장한다.

model.save('simple-text-model.krs')