自然言語処理(NLP)における特徴量エンジニアリングは、テキストデータから有用な特徴(特徴量)を抽出し、機械学習モデルの性能を向上させるプロセスです。今回の記事では、よく使われるタイタニック号のデータをもとに説明します。
質的変数と量的変数について
質的変数と量的変数は、データの種類を区別するための基本的な概念です。それぞれの特徴を以下に説明します。
質的変数 (Qualitative Variables)
質的変数は、データをカテゴリやグループに分類するための変数です。これらの変数は数値ではなく、カテゴリやラベルとして機能します。例えば:
- 性別: 男性、女性
- 血液型: A型、B型、O型、AB型
- 満足度: 非常に満足、満足、普通、不満、非常に不満
質的変数はさらに、名義尺度(単にカテゴリを区別するもの)と順序尺度(カテゴリ間に順序があるもの)に分類されます。
量的変数 (Quantitative Variables)
量的変数は、数値で表現され、その数値が実際の量や大きさを示す変数です。これらの変数は計算が可能で、連続的または離散的な値を取ります。例えば:
- 年齢: 25歳、30歳、45歳
- 身長: 160cm、175cm、180cm
- 収入: 300万円、500万円、700万円
量的変数は、間隔尺度(数値の差に意味があるもの)と比例尺度(数値の差と比率に意味があるもの)に分類されます。
質的変数と量的変数の具体例
例えば、以下のようなデータセットを考えてみましょう:
ID | 性別 | 年齢 | 身長 (cm) | 血液型 |
1 | 男性 | 25 | 175 | A型 |
2 | 女性 | 30 | 160 | B型 |
3 | 男性 | 45 | 180 | O型 |
- 質的変数: 性別、血液型
- 量的変数: 年齢、身長
このように、質的変数と量的変数を適切に区別することで、データ分析や機械学習モデルの構築がより効果的になります。
変数の種類 | 尺度の種類 | 説明 |
質的変数 | 名義尺度 | 単にカテゴリを区別するもの(例:性別、血液型) |
順序尺度 | カテゴリ間に順序があるもの(例:教育レベル、満足度) | |
量的変数 | 間隔尺度 | 数値の差に意味があるもの(例:温度、日付) |
比例尺度 | 数値の差と比率に意味があるもの(例:身長、体重、収入) |
機械で扱いやすいように変数の処理
1. 順序特徴量のマッピング
順序特徴量は、特定の順序を持つカテゴリデータです。例えば、教育レベル(高校、学士、修士、博士)などです。
import pandas as pd
# データフレームの作成
data = {'Education': ['High School', 'Bachelor', 'Master', 'PhD']}
df = pd.DataFrame(data)
# 順序特徴量のマッピング
education_mapping = {'High School': 1, 'Bachelor': 2, 'Master': 3, 'PhD': 4}
df['Education_mapped'] = df['Education'].map(education_mapping)
print(df)
2. 名義特徴量の変換
名義特徴量は、順序を持たないカテゴリデータです。例えば、色(赤、青、緑)などです。これをOne-Hot Encodingで変換します。
from sklearn.preprocessing import OneHotEncoder
# データフレームの作成
data = {'Color': ['Red', 'Blue', 'Green']}
df = pd.DataFrame(data)
# One-Hot Encoding
encoder = OneHotEncoder(sparse=False)
encoded_colors = encoder.fit_transform(df[['Color']])
# 結果をデータフレームに変換
encoded_df = pd.DataFrame(encoded_colors, columns=encoder.get_feature_names_out(['Color']))
print(encoded_df)
3. 2値化
連続値を2値に変換します。例えば、ある閾値を基準に0と1に変換します。
from sklearn.preprocessing import Binarizer
# データフレームの作成
data = {'Age': [15, 25, 35, 45]}
df = pd.DataFrame(data)
# 2値化
binarizer = Binarizer(threshold=30)
df['Age_binarized'] = binarizer.fit_transform(df[['Age']])
print(df)
4. 丸め
数値データを指定した小数点以下の桁数に丸めます。
import numpy as np
# データフレームの作成
data = {'Value': [1.123, 2.345, 3.678, 4.910]}
df = pd.DataFrame(data)
# 丸め
df['Value_rounded'] = df['Value'].round(2)
print(df)
※このシリーズは下記の書籍を参考に書いています。
コメント