プログラミング論 II 2008年吉日 主成分分析 数値積分 http://www.ns.kogakuin.ac.jp/~ct13140/Prog.2008/
概要 主成分分析 難しい.簡易に触れるのみ. 数値積分 易しい.詳しく説明.
主成分分析 主成分分析とは,複数(N個)の要素からなるデータを,重要なM個(M≦N)の要素に代表させて把握する手法. データの要素数を減らす → 情報量は失われる → 情報の把握が容易になる 重要度の低い情報を捨て, 重要度の高い情報のみにする.
例A(相関の強いデータ) 英語Listeningと 英語Readingの成績 二つのデータ (Listening成績 非常に強い相関が あった場合. 右上がりの軸(水色) でデータを把握すれば ほぼ正確に, データを把握する ことが可能.
例A(相関の強いデータ) 水色の横軸の値のみを考えれば,各人の能力はほぼ分かる. 2次元データが1次元データになった. 厳密さは失われたが,理解が容易に. 横軸は,大まかに英語力を示していると言える.
例A(相関の強いデータ) 下図の緑色の横の軸1本を 用いて,両データを 代表させた場合, 緑軸の値は英語力を 適切に表現していない. 次元を減らして, 全体を代表させる 場合は, 軸を適切に選択 せねばならない.
主成分分析 (2次元値の場合) 第一主成分 重心を通り分散が 最大の方向に 軸をとり,それを とする. それと垂直方向に 英語と数学の成績 重心を通り分散が 最大の方向に 軸をとり,それを 第一主成分 とする. それと垂直方向に 重心を通る軸をとり, これを 第二主成分とする.
主成分分析 (N次元値の場合) N次元空間上で,重心点を通り,最も分散の大きい方向に軸をとり,それを第一主成分とする. 第一主成分と垂直な軸の中で,重心点を通り,最も分散が大きい方向に軸をとり,それを第二主成分とする. 以下,同様に第1~第N主成分全てに垂直で,重心点を通り,分散が最大の方向に第N+1主成分をとる.
積分 区分求積法と台形公式のみ解説
積分 不定積分は,「微分」の逆操作.すなわち,f(x)を不定積分する/の不定積分を求めるとは,「微分したらf(x)になる関数を探す」こと. 定積分は,関数f(x)とx軸に挟まれる部分の面積を求めること. 本講義では,定積分のみを扱う.
定積分 とは? y=f(x)と,x軸と x=aと,x=bで 囲まれた領域の面積を 求めること x=a x=b
この短冊の面積は,(xi+1-xi) f(xi) 区分求積法 細かい区間毎の長方形の面積の合計で近似. 全短冊の面積の合計と, はほぼ等しい f(xi+1) f(xi) y=f(x) この短冊の面積は,(xi+1-xi) f(xi) a xi xi+1 b
区分求積法 a=x0<x1<…<xn-1<xn=bとして, f (x0),f (x1),…,f (xn)が既知なら
区分求積法 当然, 長方形の高さは 左の値を使用しても, 右の値を使用しても良い. f(xi) f(xi+1) 左の値を使用 xi xi+1 右側の値を使用 xi xi+1
区分求積法の誤差 f(xi+1) f(xi) この部分が近似の誤差 xi xi+1
区分求積法 より細かい区間に分割するほど誤差は少なくなる. 長方形でなく台形で近似した方が,より正確な近似になると期待される. 台形公式 (これは1次近似である) 近傍3点を用い,2次式で近似した方がより正確な近似になると期待される. シンプソンの公式 3次式,4次式で近似した方が更に正確. ニュートン・コーツの積分公式
区分求積法台形公式 長方形ではなく,台形で近似する. より少ない誤差で計算が可能 f(xi) f(xi+1) xi xi+1
区分求積法台形公式 a=x0<x1<…<xn-1<xn=bとして, f (x0),f (x1),…,f (xn)が既知なら 区間[a,b]をn当分した場合, として
C言語プログラミング を求めるには? h = (b-a)/N; N当分すると仮定 f(x1) f(x2) h a x1 x2 x3 x4 b xn
C言語プログラミング を求めるには? x0~xnを表示してみる. for(i=0; i<=N; i++){ h = (b-a)/N; x0 = a; x1 = a + h*1; x2 = a + h*2; : xi = a + h*i; なので, for(i=0; i<=N; i++){ printf("%lf\n", a+h*i); } N当分すると仮定 x1 x2 f(x1) f(x2) a b h x0 x3 x4 xn
C言語プログラミング を求めるには? 各短冊の面積を表示してみる. for(i=0; i<N; i++){ xi = a+h*i; xi~xi+1の短冊の横の長さは h, 縦の長さは f (xi) なので, h = (b-a)/N; for(i=0; i<N; i++){ xi = a+h*i; area = f(xi)*h; printf("%lf\n",area); } N当分すると仮定 x1 x2 f(x1) f(x2) a b h x0 x3 x4 xn
C言語プログラミング を求めるには? 全短冊の面積の合計を出す. すなわち,定積分. for(i=0; i<N; i++){ h = (b-a)/N; sum = 0.0; for(i=0; i<N; i++){ xi = a+h*i; area = f(xi)*h; sum += area; } printf("%lf\n", sum); N当分すると仮定 x1 x2 f(x1) f(x2) a b h x0 x3 x4 xn