次元削減(主成分分析) scikit-learn

次元削減(主成分分析)

scikit-learnは機械学習ライブラリであり、貿易問題を直接解決するためのツールではありませんが、クラスタリングや次元削減などの手法を使用してデータを分析し、貿易パターンを視覚化することができます。

例として、異なる国の貿易データを考え、それをscikit-learnを用いて次元削減(主成分分析)し、結果を可視化してみます。

実際の貿易データを使用せず、ダミーデータを生成して使います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

# ダミーデータ生成
# 3つの国、4つの商品(リンゴ、バナナ、オレンジ、グレープ)の貿易データを生成します
np.random.seed(42)
countries = ['Country A', 'Country B', 'Country C']
num_products = 4
num_samples = 100

# ダミーの貿易データ生成
data = np.random.randint(0, 100, size=(num_samples, num_products * len(countries)))

# 主成分分析 (PCA) を用いて次元削減
pca = PCA(n_components=2)
transformed_data = pca.fit_transform(data)

# 可視化
plt.figure(figsize=(8, 6))
for i, country in enumerate(countries):
indices = range(i * num_products, (i + 1) * num_products)
plt.scatter(transformed_data[:, 0][indices], transformed_data[:, 1][indices], label=country)

plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('Trade Data Visualization')
plt.legend()
plt.grid(True)
plt.show()

この例では、3つの国間で4つの商品の貿易データを生成し、PCAを使って次元を2つに削減します。

その後、2つの主成分をx軸とy軸として、それぞれの国のデータをプロットしています。

実際のデータを使用する場合、より意味のある視覚化が可能です。

ソースコード解説

ソースコードを詳しく見ていきましょう。

1. ライブラリのインポート

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
  • numpyは数値計算を行うためのライブラリです。
  • matplotlibはグラフ描画のためのライブラリで、pyplotモジュールをpltとしてインポートします。
  • sklearnPCAは、主成分分析を実行するためのクラスです。

2. ダミーデータの生成

1
2
3
4
5
np.random.seed(42)
countries = ['Country A', 'Country B', 'Country C']
num_products = 4
num_samples = 100
data = np.random.randint(0, 100, size=(num_samples, num_products * len(countries)))
  • np.random.seed(42)は乱数生成器のシードを設定し、乱数の再現性を確保します。
  • countriesは国のリストを表し、3つの国が含まれています。
  • num_productsは商品の数を示し、ここでは4つの商品があります。
  • num_samplesはサンプルの数を示します。ここでは各国の商品の貿易データを100サンプル生成します。
  • np.random.randint(0, 100, size=(num_samples, num_products * len(countries)))は、0から99の間のランダムな整数で、各国の各商品の貿易データを生成します。

3. 主成分分析 (PCA) を用いた次元削減

1
2
pca = PCA(n_components=2)
transformed_data = pca.fit_transform(data)
  • PCA(n_components=2)は、2次元に次元削減するPCAのインスタンスを作成します。
  • pca.fit_transform(data)は、生成された貿易データを使って主成分分析を行い、データを2次元に変換します。

4. 可視化

1
2
3
4
5
6
7
8
9
10
11
plt.figure(figsize=(8, 6))
for i, country in enumerate(countries):
indices = range(i * num_products, (i + 1) * num_products)
plt.scatter(transformed_data[:, 0][indices], transformed_data[:, 1][indices], label=country)

plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('Trade Data Visualization')
plt.legend()
plt.grid(True)
plt.show()
  • plt.figure(figsize=(8, 6))でグラフのサイズを設定します。
  • forループは各国の貿易データをプロットします。
  • plt.scatter()は散布図をプロットします。ここでは主成分1と主成分2をx軸とy軸にしてプロットしています。
  • plt.xlabel()plt.ylabel()でx軸とy軸のラベルを設定し、plt.title()でグラフのタイトルを設定します。
  • plt.legend()で凡例を表示し、plt.grid(True)でグリッド線を表示します。
  • plt.show()でグラフを表示します。

これにより、ダミーの貿易データをPCAで2次元に変換し、各国の商品の貿易パターンを可視化するグラフが作成されます。

結果解説

生成されたグラフは、3つの国(Country A、Country B、Country C)間で4つの商品(リンゴ、バナナ、オレンジ、グレープ)の貿易データの次元削減結果を可視化したものです。

横軸と縦軸はそれぞれ主成分分析(PCA)によって得られた2つの主成分です。
これらの主成分は元の多次元のデータをより少ない次元(ここでは2次元)に圧縮したものです。

それぞれの国は異なる色で表されており、各国の点の集まりがその国の商品の貿易パターンを示しています。
点が近くに集まっている場合、その国は類似した貿易パターンを持っていることを示しています。
逆に、点が離れている場合、その国の商品の貿易パターンは異なる可能性があります。

グラフ上の点が重なっている場合、その点のデータは次元削減によって同じ位置にマッピングされたため、視覚的には1つの点に見えますが、実際には複数のデータ点が含まれています。

このグラフは、異なる国の間での商品の貿易パターン類似性を視覚的に理解するのに役立ちます。
もし実際の貿易データがあれば、これらの点のパターンクラスタリングをより詳細に解釈することができます。