<jupyter_start><jupyter_text>패키지 및 데이터 불러오기 불러오기<jupyter_code>import pandas as pd
import numpy as np
import os
from sklearn.feature_extraction.text import CountVectorizer
DATA_IN_PATH = './data_in/'
DATA_OUT_PATH = './data_out/'
TRAIN_CLEAN_DATA = 'train_clean.csv'
TEST_SIZE = 0.2
RANDOM_SEED = 42
train_data = pd.read_csv(DATA_IN_PATH + TRAIN_CLEAN_DATA)
reviews = list(train_data['review'])
y = np.array(train_data['sentiment'])<jupyter_output><empty_output><jupyter_text>CountVectorizer를 활용한 벡터화<jupyter_code>vectorizer = CountVectorizer(analyzer = "word", max_features = 5000) 

train_data_features = vectorizer.fit_transform(reviews)<jupyter_output><empty_output><jupyter_text>학습과 검증 데이터 분리<jupyter_code>from sklearn.model_selection import train_test_split
train_input, eval_input, train_label, eval_label = train_test_split(train_data_features, y, test_size=TEST_SIZE, random_state=RANDOM_SEED)<jupyter_output><empty_output><jupyter_text>모델 구현 및 학습<jupyter_code>from sklearn.ensemble import RandomForestClassifier


# 랜덤 포레스트 분류기에  100개 의사 결정 트리를 사용한다.
forest = RandomForestClassifier(n_estimators = 100) 

# 단어 묶음을 벡터화한 데이터와 정답 데이터를 가지고 학습을 시작한다.
forest.fit( train_input, train_label )
print("Accuracy: %f" % forest.score(eval_input, eval_label))  # 검증함수로 정확도 측정<jupyter_output>Accuracy: 0.846200<jupyter_text>검증 데이터셋으로 성능 평가<jupyter_code>TEST_CLEAN_DATA = 'test_clean.csv'

test_data = pd.read_csv(DATA_IN_PATH + TEST_CLEAN_DATA)

test_reviews = list(test_data['review'])
ids = list(test_data['id'])
test_data_features = vectorizer.transform(test_reviews)<jupyter_output><empty_output><jupyter_text>데이터 제출하기<jupyter_code>if not os.path.exists(DATA_OUT_PATH):
    os.makedirs(DATA_OUT_PATH)
    
# 위에서 만든 랜덤 포레스트 분류기를 통해 예측값을 가져온다.
result = forest.predict(test_data_features)

# 판다스 데이터 프레임을 통해 데이터를 구성해서 output에 넣는다.
output = pd.DataFrame( data={"id": ids, "sentiment": result} )

# 이제 csv파일로 만든다.
output.to_csv( DATA_OUT_PATH + "Bag_of_Words_model.csv", index=False, quoting=3 )<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10406342913776016, 'fraction_numerical': 0.010901883052527254, 'mean_word_length': 7.702586206896552, 'pattern_counts': {'":': 2, '<': 24, '<?xml version=': 0, '>': 24, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '267682', 'license': 'Apache-2.0', 'n_tokens_mistral': 955, 'n_tokens_neox': 1049, 'n_words': 144, 'path': '3.TEXT_CLASSIFICATION/3.1.5 Random Forest.ipynb', 'repo_name': 'semi-zero/NLP_study', 'size': '2018'}