Scikit-learn Library

  • Traditional Machine Learning (vs DL, 인공신경을 썼는지의 여부)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from sklearn import datasets, linear_model, model_selection, metrics

data_total = datasets.load_boston()

x = data_total.data
y = data_total.target

train_x, test_x, train_y, test_y =
    model_selection.train_test_split(x, y, test_size=0.3)

# 학습 전의 모델 생성
model = linear_model.LinearRegression()
# 모델에 학습 데이터를 넣으면서 학습 진행
model.fit(train_x, train_y)

# 모델에게 새로운 데이터를 주면서 예측 요구
predictions = model.predict(test_x)
# 예측 결과를 바탕으로 성능 점수 확인
metrics.mean_squared_error(predictions, test_y)
  • 실습에서 사용할 패키지
1
2
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

Vectorizer

1
2
3
4
5
6
7
corpus = [doc1, doc2, doc3]

vectorizer = TfidfVectorizer()

X = vectorizer.fit_transform(corpus).todense()
# vertorizer.fit(corpus)
# X = vectorizer.trasnform(corpus)
  • Vectorizer는 리스트로 묶인 다수의 데이터에 대한 벡터 생성
  • fit_transform()은 기본적으로 메모리를 차지하는 ‘0’이라는 값들을 제외하고
    좌표에 대한 값의 형태로 표시
  • .todense(): ‘0’이라는 값들을 포함하여 행렬의 형태로 표시
  • X.shape: Vectorizer의 모양 확인 (row, column)
  • CountVectorizer(): 단어의 출연 횟수만으로 벡터 생성
1
2
[[0.0071001  0.00332632 0.         ... 0.         0.00166316 0.        ]
 [0.00889703 0.         0.00138938 ... 0.00138938 0.         0.00138938]]

Pandas Output

vectorizer-pandas


3. Cosine Similarity

1
cosine_similarity(X[0], X[1])

[하나의 행 vs 전체 행] 구도로 표시

1
2
3
4
similarity = cosine_similarity(X[0], X)

# 위에서부터 순서대로 보기 위해 전치 행렬(Transpose)로 표시
pd.DataFrame(similarity.T)

similarity-pandas-single

[각 행 vs 전체 행] 구도로 표시

1
2
3
4
5
similarity = cosine_similarity(X, X)

result = pd.DataFrame(similarity)
result.columns = ['Shawshank', 'Godfather', 'Inception']
result.index = ['Shawshank', 'Godfather', 'Inception']

similarity-pandas-multi

유사도 행렬 시각화

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(10, 10))

sns.heatmap(result, annot=True, fmt='f', linewidths=5, cmap='RdYlBu')

sns.set(font_scale=1.5)
plt.tick_params(top=True, bottom=False, labeltop=True, labelbottom=False)
plt.show()

similarity-heatmap