質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

463閲覧

Pythonのscikit-learnのPCAを使って主成分分析を実行するには

sato0123

総合スコア0

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2023/01/22 16:12

前提

大学のpythonの課題で答えが開示されたのですがarr1がどうしてそうなるのかわからないです。
問題からarr1が(9,5,9),(0.5,0.5,0.2)になることがわかるのですか?
どう考えるのでしょうか教えていただければと思います。

初質問なので足りないところあればいってください
よろしくお願いします。

問題

•以下のプログラムを作成せよ 1.平均(8, 8, 8)、各軸方向の標準偏差が(1, 1, 0.5)の分布に従って三次元ベクトルを100個、乱数を用いて作成(乱数シードは"314"を指定すること) 2.1.のデータ群に対し主成分分析を行った際の第一、第二主成分を出力 実行例: [-0.65195589 0.65607819 -0.38015118] [-0.70294748 -0.71092027 -0.02138237]

課題の解答

Python

1import numpy as np 2import sklearn 3from sklearn.decomposition import PCA 4 5np.random.seed(314) 6arr0 = np.random.normal((8,8,8), (1,1,0.5), (100,3)) 7arr1 = np.random.normal((9,7,9), (0.5,0.5,0.2), (100,3)) ←ここです 8arr2 = np.concatenate([arr0,arr1]) 9N=2 10 11pca = PCA(n_components=int(N)) 12pca.fit(arr2) 13 14print(pca.components_[0]) 15print(pca.components_[1])

自分の回答

Python

1import numpy as np 2from sklearn.decomposition import PCA 3 4# 乱数シードを指定 5np.random.seed(314) 6 7# 平均(8, 8, 8)、各軸方向の標準偏差が(1, 1, 0.5)の分布に従って三次元ベクトルを100個作成 8data = np.random.normal(loc=[8, 8, 8], scale=[1, 1, 0.5], size=(100, 3)) 9 10# 主成分分析を実行 11pca = PCA(n_components=2) 12pca.fit(data) 13 14 15# 第一、第二主成分を出力 16print(pca.components_[0]) 17print(pca.components_[1])

得られた出力↓

[-0.82369139 0.55806426 -0.10048272] [-0.56232634 -0.82671648 0.01813685]

補足情報(FW/ツールのバージョンなど)

Google Colaboratory使用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2023/01/23 04:56

> 1.平均(8, 8, 8)、各軸方向の標準偏差が(1, 1, 0.5)の分布に従って三次元ベクトルを100個 - 「各軸」とはどれとどれ(とどれ)のことか? - 「ベクトルを100個」とは各軸毎か?合計か? といったところが問題文からはあいまいだと思うので まずは出題(解答)者にこれらについて確認すべきかと思います。
jbpb0

2023/01/23 06:35

> 大学のpythonの課題で答えが開示されたのですがarr1がどうしてそうなるのかわからないです。 大学の課題なら、課題を出した人に聞いたらいいと思うのですが
jbpb0

2023/01/23 07:47 編集

以下、課題内容とズレてるかもしれないので、参考程度に見てください また、課題文には「各軸方向の標準偏差が(1, 1, 0.5)の分布」としか書かれてないので、どのような分布なのか分かりませんが、正規分布と仮定します 「自分の回答」のコードで、 data = np.random.normal(loc=[8, 8, 8], scale=[1, 1, 0.5], size=(100, 3)) ↓ 変更 mean = np.array([8, 8, 8]) sx = 1 sy = 1 sz = 0.5 rxy = 1 rxz = rxy ryz = rxy cov = np.array([[sx**2, rxy*sx*sy, rxz*sx*sz], [rxy*sy*sx, sy**2, ryz*sy*sz], [rxz*sz*sx, ryz*sz*sy, sz**2]]) data = np.random.multivariate_normal(mean, cov, size=100) とすれば、生成される100個のベクトルは、方向が全て「1, 1, 0.5」になり、正規分布に従って変わるのはベクトルの大きさだけです この場合の第一主成分は、「1, 1, 0.5」の比とピッタリ合う「0.66666667 0.66666667 0.33333333」になります コードの「rxy = 1」の値を「1」よりも小さくすると、生成されるベクトルの方向が「1, 1, 0.5」からズレてくるため、第一主成分は「1, 1, 0.5」の比と合わなくなります たとえば、「rxy = 0.8」の場合の第一主成分は「0.70700209 0.64651726 0.28664172」です しかしながら、生成するベクトルの数を増やせば、ベクトルの方向の平均は「1, 1, 0.5」に合ってくるので、第一主成分は「1, 1, 0.5」の比に近くなります たとえば、「rxy = 0.8」でも、ベクトル数が「10000000」の場合の第一主成分は「0.67227396 0.67230097 0.30993406」となり、ベクトル数が「100」の場合の「0.70700209 0.64651726 0.28664172」よりは「1, 1, 0.5」の比に近くなります 以上、ご参考までに 【追記】 上記の変更をしたコードで、「rxy = 0」でベクトル数が「100」の場合の第一主成分は「0.55806426 -0.82369139 -0.10048272」となり、「得られた出力↓」の「-0.82369139 0.55806426 -0.10048272」と実質同じですね (最初の二つの数値が逆ですが、それらの軸は標準偏差が同じなので、同等と解釈して)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問