ベクトル化
#CS #ソフトウェア
=Vectorization
とは
データをベクトルの形式に変換することを指す
なぜ必要か?
一般的にコンピューターは数値データを処理することが可能であるが、文字列や画像などの非数値データを扱うことはできない
そこで、非数値データを数値ベクトルに変換することで、コンピューターが扱いやすい形式に変換することがベクトル化の目的である
ユースケース
自然言語処理(NLP):単語や文章をベクトル化して、テキストデータを数値化することで、文章の類似度や感情分析、文章生成などに応用される。代表的な手法としては、TF-IDFやWord2Vec、BERTなどがある
画像処理:画像をピクセルの配列に変換して、それをベクトル化することで、画像の特徴量を抽出することができる。代表的な手法としては、SIFTやSURF、HOG、CNNなどがある
機械学習:データをベクトル化することで、機械学習アルゴリズムに適した形式に変換することができる。特に、教師あり学習の場合には、入力データと教師ラベルをベクトル化して、モデルの学習に使用する
推薦システム:商品やユーザーの特徴をベクトル化することで、ユーザーの嗜好に合った商品を推薦することができる。代表的な手法としては、ユーザー・アイテム行列分解やコンテキスト特徴量法がある。
ベクトル化してみた
実際にPythonでそれぞれのユースケース に対してベクトル化を行うとどうなるのか実験してみる
自然言語
配列データに対して、CountVectorizerを使用して、単語をベクトル化
ベクトル化されたデータを出力
code:script.py
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
# テキストデータ
texts = 'This is a pen', 'That is an apple', 'I like apples'
# CountVectorizerを使用して、単語をベクトル化
vectorizer = CountVectorizer()
vectorizer.fit_transform(texts)
# ベクトルの出力
print(vectorizer.vocabulary_)
# {'this': 6, 'is': 2, 'pen': 4, 'that': 5, 'an': 0, 'apple': 1, 'like': 3}
画像ファイル
Imageモジュールのopen関数で画像を読み込む
numpyのarray関数でnumpy配列に変換
flatten関数で1次元のベクトルに変換
1次元のベクトルとして、画像のピクセル値が並んで出力される。各要素は0~255の整数値で、それぞれが画像の一つのピクセルの値を表す
code:script.py
import numpy as np
from PIL import Image
# 画像ファイル
image = Image.open('example.jpg')
# 画像をnumpy配列に変換
image_array = np.asarray(image)
# 画像をFlattenして、ベクトル化
vector = image_array.flatten()
# ベクトルの出力
print(vector)
#
# 236 243 245 ... 80 94 95
ECにおける商品やユーザーの特徴
商品の特徴量を配列で準備
OneHotEncoderを使用して、商品の特徴量をベクトル化
code:script.py
import numpy as np
from sklearn.preprocessing import OneHotEncoder
# 商品の特徴量
product_features = 'book', '20', '5'], 'phone', '50000', '10', ['food', '500', '100'
# OneHotEncoderを使用して、商品の特徴量をベクトル化
enc = OneHotEncoder()
enc.fit(product_features)
# ベクトルの出力
print(enc.transform('book', '20', '5'], ['food', '500', '100').toarray())
# [1. 0. 0. 1. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.
# 0. 0. 1. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]