Python言語による ビジネスアナリティクス 実務家のための最適化・統計解析・機械学習 科学技術計算モジュール SciPy

Slides:



Advertisements
Similar presentations
計測工学 10 データの補間 スプライン補間 1. . 復習 階差 近似多項式の次数 の決定法 等間隔階差 – 関数 y=f(x) で、 x の値 が等間隔の場合 等間隔: x 0, x 0 +h, x 0 +2h ・・・ y の値: y 0, y 1, y 2 ・・・ これらの階差は – 第1階差:
Advertisements

図示、可視化モジュール ~ pylab と numpy を ちょっと~. pylab とは? ・数学や統計的なグラフを生成するモ ジュール ・インストール pip や easy install からのインストールを推奨 →numpy モジュールなどの前提としている。 Anaconda の場合は標準.
生物統計学・第 5 回 比べる準備をする 標準偏差、標準誤差、標準化 2013 年 11 月 7 日 生命環境科学域 応用生命科学 類 尾形 善之.
『わかりやすいパターン認 識』 第 5 章 特徴の評価とベイズ誤り確率 5.4 ベイズ誤り確率と最近傍決定則 発表日: 5 月 23 日(金) 発表者:時田 陽一.
Lesson 9. 頻度と分布 §D. 正規分布. 正規分布 Normal Distribution 最もよく使われる連続確率分布 釣り鐘形の曲線 -∽から+ ∽までの値を取る 平均 mean =中央値 median =最頻値 mode 曲線より下の面積は1に等しい.
1 線形代数学. 2 履修にあたって 電子情報システム学科 必修 2005 年度1セメスタ開講 担当 草苅良至 (電子情報システム学科) 教官室: G I 511 内線: 2095 質問等は上記のいずれかに行なうこと。 注意計算用のノートを準備すること。
2. 数値微分法. 数値微分が必要になる場合として、次の 2 つが考えられる。 関数が与えられていて、その微分を近似的に計算する。 (数値微分の精度が十分で、かつ、計算速度が数値微分の方が 早い場合など。) 離散的な点の上で離散的なデータしかわかっていない関数の微 分を近似的に計算する。(偏微分方程式の数値解を求めたい時.
放射線の計算や測定における統計誤 差 「平均の誤差」とその応用( 1H) 2 項分布、ポアソン分布、ガウス分布 ( 1H ) 最小二乗法( 1H )
1. 補間多項式 n 次の多項式 とは、単項式 の 線形結合の事である。 Definitions: ( 区間, 連続関数, abscissas (データ点、格子点、差分点), 多項 式 ) Theorem. (補間多項式の存在と一意性) 各 i = 0, …, n について、 をみたす、次数が高々 n.
●母集団と標本 母集団 標本 母数 母平均、母分散 無作為抽出 標本データの分析(記述統計学) 母集団における状態の推測(推測統計学)
第1回 確率変数、確率分布 確率・統計Ⅰ ここです! 確率変数と確率分布 確率変数の同時分布、独立性 確率変数の平均 確率変数の分散
多変量解析 -重回帰分析- 発表者:時田 陽一 発表日:11月20日.
近似アルゴリズム 第10章 終了時刻最小化スケジューリング
スペクトル法による数値計算の原理 -一次元線形・非線形移流問題の場合-
統計解析 第9回 第9章 正規分布、第11章 理論分布.
Extremal Combinatorics 14.1 ~ 14.2
最適化ソルバーのための Python言語入門
時空間データからのオブジェクトベース知識発見
上坂吉則 尾関和彦 文一総合出版 宮崎大輔2003年6月28日(土)
土木計画学 第11回(12月21日) 土木計画と説明責任 計画における代替案の作成1 担当:榊原 弘之.
放射線の計算や測定における統計誤差 「平均の誤差」とその応用(1H) 2項分布、ポアソン分布、ガウス分布(1H) 最小二乗法(1H)
第3章 重回帰分析 ー 計量経済学 ー.
第3章 重回帰分析 ー 計量経済学 ー.
線形代数学 4.行列式 吉村 裕一.
確率・統計輪講資料 6-5 適合度と独立性の検定 6-6 最小2乗法と相関係数の推定・検定 M1 西澤.
応用統計学の内容 推測統計学(inferential statistics)   連続型の確率分布   標本分布   統計推定   統計的検定.
4.2 連立非線形方程式 (1)繰返し法による方法
1章前半.
誤差の二乗和の一次導関数 偏微分.
ガウス過程による回帰 Gaussian Process Regression GPR
第6章 カーネル法 修士2年 藤井 敬士.
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
第9章 混合モデルとEM 修士2年 北川直樹.
応用統計学の内容 推測統計学(inferential statistics)   連続型の確率分布   標本分布   統計推定   統計的検定.
正規分布確率密度関数.
混合ガウスモデルによる回帰分析および 逆解析 Gaussian Mixture Regression GMR
モデルの逆解析 明治大学 理工学部 応用化学科 データ化学工学研究室 金子 弘昌.
確率論の基礎 「ロジスティクス工学」 第3章 鞭効果 第4章 確率的在庫モデル 補助資料
情報理工学系研究科 数理情報学専攻 数理第四研究室 博士三年 指導教員: 駒木 文保 准教授 鈴木 大慈 2008年8月14日
標本分散の標本分布 標本分散の統計量   の定義    の性質 分布表の使い方    分布の信頼区間 
知能システム論I(13) 行列の演算と応用(Matrix) 2008.7.8.
東北大学 大学院情報科学研究科 応用情報科学専攻 田中 和之(Kazuyuki Tanaka)
数値計算モジュール NumPy.
疑似乱数, モンテカルロ法によるシミュレーション
知識科学研究科 知識システム構築論講座 林研究室 佛明 智
Pp-10. Python の numpy Python を演習と実践で学ぶシリーズ 金子邦彦.
データの型 量的データ 質的データ 数字で表現されるデータ 身長、年収、得点 カテゴリで表現されるデータ 性別、職種、学歴
4. システムの安定性.
「データ学習アルゴリズム」 第3章 複雑な学習モデル 報告者 佐々木 稔 2003年6月25日 3.1 関数近似モデル
わかりやすいパターン認識 第7章:部分空間法  7.1 部分空間法の基本  7.2 CLAFIC法                  6月13日(金)                  大城 亜里沙.
第3章 線形回帰モデル 修士1年 山田 孝太郎.
情報経済システム論:第13回 担当教員 黒田敏史 2019/5/7 情報経済システム論.
データ解析 静岡大学工学部 安藤和敏
最尤推定・最尤法 明治大学 理工学部 応用化学科 データ化学工学研究室 金子 弘昌.
Pp-12. Python の numpy Python を演習と実践で学ぶシリーズ 金子邦彦.
回帰分析(Regression Analysis)
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
情報の集約 記述統計 記述統計とは、収集したデータの分布を明らかにする事により、データの示す傾向や性質を要約することです。データを収集してもそこから情報を読み取らなければ意味はありません。特に膨大な量のデータになれば読みやすい形にまとめて要約する必要があります。
土木計画学 第12回(1月14日) 計画における代替案の作成2 担当:榊原 弘之.
データ解析 静岡大学工学部 安藤和敏
ガウス分布における ベーテ近似の理論解析 東京工業大学総合理工学研究科 知能システム科学専攻 渡辺研究室    西山 悠, 渡辺澄夫.
確率と統計2007(最終回) 平成20年1月17日(木) 東京工科大学 亀田弘之.
1.基本概念 2.母集団比率の区間推定 3.小標本の区間推定 4.標本の大きさの決定
情報工学Ⅱ (第8回) 月曜4限 担当:北川 晃.
データ分布の特徴 基準化変量 歪度 尖度.
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
回帰分析入門 経済データ解析 2011年度.
Cプログラミング演習 ニュートン法による方程式の求解.
3 一次関数 1章 一次関数とグラフ §4 方程式とグラフ         (3時間).
混合ガウスモデル Gaussian Mixture Model GMM
Presentation transcript:

Python言語による ビジネスアナリティクス 実務家のための最適化・統計解析・機械学習 科学技術計算モジュール SciPy 久保幹雄

SciPyとは 様々な科学技術計算のための実装を含むモジュール群 bookpy/notebooks内で扱うモジュールは以下のとおり - optimize : 最適化と方程式の根(=解) - spatial : 計算幾何 - stats : 確率・統計 - interpolate : 補間 - integrate : 積分 - linalg : 線形代数 - cluster : クラスタリング - sparse : 疎行列

optimizeに含まれる 非線形最適化のための関数 関数 pythonでこの関数を実装する Google検索からのplot

optimizeに含まれる 非線形最適化のための関数 matplotlibとNumPyを用いてplotしてみる def f(x): 関数の定義 return x/(1+x**2) xx=np.linspace(-10,10,100) yy=f(xx) plot(xx,yy);None -10から10までを等間隔に 100等分した配列

optimizeに含まれる 非線形最適化のための関数 関数 の最小値を求める 関数 は1変数であるため minimize_scalarメソッドを用いる 引数methodでアルゴリズムの選択 - Brent : Brent法 - Golden : 黄金分割法 - Bounded : 最適解の範囲を引数boundsで与えた場合のBrent法

optimizeに含まれる 非線形最適化のための関数 print("Brent=========================") print(minimize_scalar(f, method='Brent')) print("Golden=========================") print(minimize_scalar(f, method='Golden')) print("Bounded=========================") print(minimize_scalar(f, bounds=(-2,0), method='Bounded')) アルゴリズムの選択 解の範囲(区間)

optimizeに含まれる 非線形最適化のための関数 問題1: 区間 における 関数 の最小値を求めよ fun: 4.5000120151014613 message: 'Solution found.' nfev: 27 status: 0 success: True x: 2.0000040050311472

optimizeに含まれる 非線形最適化のための関数 複数の変数をもつ関数をある初期解からの探索で最小化 非凸な非線形関数の代表例:Rosenbrock関数

optimizeに含まれる 非線形最適化のための関数 minimizeで用いることができる解法 引数 : method - Nelder-Mead法(非線形最適化用の単体法) - BFGS法(準ニュートン法) - 信頼領域Newton共役勾配法

optimizeに含まれる 非線形最適化のための関数 from scipy.optimize import minimize, rosen, rosen_der, rosen_hess x0 = [2.0 for i in range(5)] res = minimize(rosen, x0, method='Nelder-Mead') print(res.x) res = minimize(rosen, x0, jac=rosen_der, method='BFGS') res = minimize(rosen, x0, jac=rosen_der, hess=rosen_hess, method='trust-ncg') 初期解(5次元) 解法によって必要な引数が 異なることに注意 勾配ベクトル ヘッセ行列

optimizeに含まれる 非線形最適化のための関数 問題2: Rosenbrock関数の最小化を初期値を変えて行え。 Rosenbrock関数は実行可能領域 で定義されている関数である。 この範囲外の初期値を与えるとどうなるか 実験せよ。

optimizeに含まれる 非線形最適化のための関数 制約付き最適化の例 半径   の円内          の制約下で 線形関数      を最大化          線形関数         を最小化

optimizeに含まれる 非線形最適化のための関数 def f(x): return -x[0]-x[1] bnds = ((0, None), (0, None)) f = lambda x: -x[0]-x[1] con = {'type': 'ineq', 'fun': lambda x: -x[0]**2 - x[1]**2 + 2 } res = minimize(fun=f, x0=[2,2], method='COBYLA',constraints=con) print("COBYLA========= \n",res) res = minimize(fun=f, x0=[2,2], method='SLSQP',constraints=con) print("SLSQP========== \n",res)

optimizeに含まれる 非線形最適化のための関数 def f(x): x[0]をx , x[1]をyと考える return -x[0]-x[1] bnds = ((0, None), (0, None)) f = lambda x: -x[0]-x[1] con = {'type': 'ineq', 'fun': lambda x: -x[0]**2 - x[1]**2 + 2 } res = minimize(fun=f, x0=[2,2], method='COBYLA',constraints=con) print("COBYLA========= \n",res) res = minimize(fun=f, x0=[2,2], method='SLSQP',constraints=con) print("SLSQP========== \n",res)         

optimizeに含まれる 非線形最適化のための関数 def f(x): return -x[0]-x[1] bnds = ((0, None), (0, None)) f = lambda x: -x[0]-x[1] 無名関数lambdaで関数を定義 con = {'type': 'ineq', 'fun': lambda x: -x[0]**2 - x[1]**2 + 2 } res = minimize(fun=f, x0=[2,2], method='COBYLA',constraints=con) print("COBYLA========= \n",res) res = minimize(fun=f, x0=[2,2], method='SLSQP',constraints=con) print("SLSQP========== \n",res)

optimizeに含まれる 非線形最適化のための関数 def f(x): return -x[0]-x[1] bnds = ((0, None), (0, None)) ((x下限, x上限),(y下限, x上 限)) f = lambda x: -x[0]-x[1] con = {'type': 'ineq', 'fun': lambda x: -x[0]**2 - x[1]**2 + 2 } res = minimize(fun=f, x0=[2,2], method='COBYLA',constraints=con) print("COBYLA========= \n",res) res = minimize(fun=f, x0=[2,2], method='SLSQP',constraints=con) print("SLSQP========== \n",res)

optimizeに含まれる 非線形最適化のための関数 type : 関数が等式の場合は eq 非負の不等式の場合は ineq fun : 制約を表す関数を定義 def f(x): return -x[0]-x[1] bnds = ((0, None), (0, None)) f = lambda x: -x[0]-x[1] con = {'type': 'ineq', 'fun': lambda x: -x[0]**2 - x[1]**2 + 2 } res = minimize(fun=f, x0=[2,2], method='COBYLA',constraints=con) print("COBYLA========= \n",res) res = minimize(fun=f, x0=[2,2], method='SLSQP',constraints=con) print("SLSQP========== \n",res)

optimizeに含まれる 非線形最適化のための関数 def f(x): return -x[0]-x[1] bnds = ((0, None), (0, None)) f = lambda x: -x[0]-x[1] con = {'type': 'ineq', 'fun': lambda x: -x[0]**2 - x[1]**2 + 2 } res = minimize(fun=f, x0=[2,2], method='COBYLA',constraints=con) print("COBYLA========= \n",res) res = minimize(fun=f, x0=[2,2], method='SLSQP',constraints=con) print("SLSQP========== \n",res)

optimizeに含まれる 非線形最適化のための関数 def f(x): return -x[0]-x[1] bnds = ((0, None), (0, None)) f = lambda x: -x[0]-x[1] con = {'type': 'ineq', 'fun': lambda x: -x[0]**2 - x[1]**2 + 2 } res = minimize(fun=f, x0=[2,2], method='COBYLA',constraints=con) print("COBYLA========= \n",res) res = minimize(fun=f, x0=[2,2], method='SLSQP',constraints=con) print("SLSQP========== \n",res) fun : 最小化させたい関数 x0 : 初期値 (x,y) = (2,2) method : 解法 constraints : 制約

optimizeに含まれる 非線形最適化のための関数 問題3: 鳥が放物線 を描いて飛んでいる。 いま の位置にいるカメラマンが、鳥との距離が最小の 地点でシャッターを押そうとしている。鳥がどの座標に来たとき にシャッターを押せば良いだろうか? 制約が等式であるため、 minimizeの引数methodはSLSQP SLSQP========== fun: 13.974527770010818 jac: array([-0.68220401, 0.73116183, 0. ]) message: 'Optimization terminated successfully.' nfev: 28 nit: 7 njev: 7 status: 0 success: True x: array([ 0.46652173, 10.21764251])

optimizeに含まれる 非線形最適化のための関数 大域的最適化と局所的最適化 - basinhopping(関数 , 初期解)  焼きなまし法(アニーリング法) - brute(関数, 範囲)  力づく法 大域的最適解 局所的最適解

optimizeに含まれる 非線形最適化のための関数 曲線へのあてはめ(最小2乗法) - 最小2乗法 : 測定で得られた数値の組の関係を近似した関数で 表すとき、残差の二乗和を最小とするような係数を決定し、近 似を行う方法 curve_fit(関数, data1, data2) * np.random.normal()  標準正規分布に従う擬似乱数ベクトル

optimizeに含まれる 非線形最適化のための関数 曲線へのあてはめ(関数の根・不動点を求める) - brentq(関数, 値1, 値2) : Brent法によって関数の値1と値2の間に ある根を求める * 関数の値の符号は異なる必要がある

Spatial 計算幾何学 - 幾何的問題 : 図形や空間に関する問題 spatialに含まれるクラス 計算機科学とは、幾何的問題を効率よく解くための基本アルゴリズム の体系化をめざす学問分野である  - 幾何的問題 : 図形や空間に関する問題 spatialに含まれるクラス - K-d木 - 凸包 - Delaunay 3角形分割 - Voronoi図 - distanceモジュール

Spatial 計算幾何学 K-d木 K-d木(K-d Tree)とはK次元の平面空間にある点を保管するため の空間分割データ構造である。二分木の一種で根とよばれる点 を2つの子点に分割する操作を繰り返すことで得られる。

Spatial 計算幾何学 K-d木 K-d木(K-d Tree)とはK次元の平面空間にある点を保管するため の空間分割データ構造である。二分木の一種で根とよばれる点 を2つの子点に分割する操作を繰り返すことで得られる。 右図は空間を中央値で 分割するとき、 最初の操作後の平面空間を 二分木で表したもの

0 〜 1の一様乱数をもつ二次元ベクトルを1000個含む配列 Spatial 計算幾何学 points = np.random.rand(1000, 2) tree = KDTree(points) ball = tree.query_ball_point([0.5, 0.5], 0.1) plot(points[:,0], points[:,1], 'b+') plot(points[ball,0], points[ball,1], 'ro'); None 0 〜 1の一様乱数をもつ二次元ベクトルを1000個含む配列

Spatial 計算幾何学 points = np.random.rand(1000, 2) tree = KDTree(points) ball = tree.query_ball_point([0.5, 0.5], 0.1) plot(points[:,0], points[:,1], 'b+') plot(points[ball,0], points[ball,1], 'ro'); None KDTreeクラスのインスタンスオブジェクトは配列pointsを引数に要する 点 (0.5,0.5)から距離0.1以内の すべての点のインデックスの 配列を返す

Spatial 計算幾何学 points = np.random.rand(1000, 2) tree = KDTree(points) ball = tree.query_ball_point([0.5, 0.5], 0.1) plot(points[:,0], points[:,1], 'b+') plot(points[ball,0], points[ball,1], 'ro'); None 配列pointsに含まれるすべての要素の0番目

Spatial 計算幾何学 points = np.random.rand(1000, 2) tree = KDTree(points) ball = tree.query_ball_point([0.5, 0.5], 0.1) plot(points[:,0], points[:,1], 'b+') plot(points[ball,0], points[ball,1], 'ro'); None 配列ballに含まれるインデックスと同じインデックスもつ 配列pointsの要素の0番目

Spatial 計算幾何学 出力される画像

Spatial 計算幾何学 凸包(Convex hull)とは、 与えられたn次元Euclid空間内の点を含む最小の凸多面体 n次元の凸包はn-1次元の面から構成され、 構成された図形は単体(simplex)になる

Spatial 計算幾何学 points = np.random.rand(30, 2) hull = ConvexHull(points) convex_hull_plot_2d(hull) print( hull.vertices )

0 〜 1の一様乱数をもつ二次元ベクトルを30個含む配列 Spatial 計算幾何学 points = np.random.rand(30, 2) hull = ConvexHull(points) convex_hull_plot_2d(hull) print( hull.vertices ) 0 〜 1の一様乱数をもつ二次元ベクトルを30個含む配列

Spatial 計算幾何学 points = np.random.rand(30, 2) hull = ConvexHull(points) convex_hull_plot_2d(hull) print( hull.vertices ) ConvexHullクラスは コンストラクタの引数に n次元の点の配列pointsを要する

Spatial 計算幾何学 points = np.random.rand(30, 2) hull = ConvexHull(points) convex_hull_plot_2d(hull) print( hull.vertices )

Spatial 計算幾何学 points = np.random.rand(30, 2) hull = ConvexHull(points) convex_hull_plot_2d(hull) print( hull.vertices ) 端点

Spatial 計算幾何学 ボロノイ図(Voronoi diagram)とは、 各点に近い空間で領域わけされた図である。(双対=ドロネー図) 与えられた点を母点とよび、各母点に近い空間からなる領域を ボロノイ領域とよぶ。

Spatial 計算幾何学 points = np.array([[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]) vor = Voronoi(points) fig = voronoi_plot_2d(vor) print( vor.vertices )

Spatial 計算幾何学 points = np.array([[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]) vor = Voronoi(points) fig = voronoi_plot_2d(vor) print( vor.vertices ) 8個の点(x,y)を含む 配列pointsをnp.array で生成

生成した点データ(配列)を コンストラクタの引数に Spatial 計算幾何学 points = np.array([[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]) vor = Voronoi(points) fig = voronoi_plot_2d(vor) print( vor.vertices ) 生成した点データ(配列)を コンストラクタの引数に

Spatial 計算幾何学 points = np.array([[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]) vor = Voronoi(points) fig = voronoi_plot_2d(vor) print( vor.vertices )

Spatial 計算幾何学 問題4: 右下図と同じボロノイ図をplotしなさい from scipy.spatial import Voronoi, voronoi_plot_2d points = np.array([[1, 0], [1, 2], [2, 0], [2, 2]]) vor = Voronoi(points) fig = voronoi_plot_2d(vor) print( vor.vertices )

Spatial 計算幾何学 問題5: Weber問題(教科書88p 6.1 最適化より)で与えられている表6.1中の 家の位置をplotし、各家に近い領域で分けられたボロノイ図を描画せよ。 本問題 問1を解け。 本問題 問2を解け。 SLSQP========== [ 32.78360781 68.85499866] [ 19.44635948 75.81617808]

第1週はここまで

確率・統計 stats 確率・統計に関するモジュール stats 確率分布の基礎 共通のメソッド 連続確率変数 離散確率変数 データのあてはめ 相関と回帰 分布テスト

確率・統計 stats 正規分布クラス norm コンストラクタの引数 loc : 位置を表すパラメータ(μ : 平均) scale : 尺度を表すパラメータ(σ : 標準偏差) 既定値をもち、それぞれloc = 0, scale = 1 つまり標準正規分布 である

平均100,標準偏差10の正規分布 の確率分布関数 statsメソッドにより 統計量(平均,分散,歪度,尖度)を得る from scipy.stats import norm print( norm(loc=100,scale=10 ).stats(moments='mvsk') ) 平均100,標準偏差10の正規分布 の確率分布関数 statsメソッドにより 統計量(平均,分散,歪度,尖度)を得る

確率・統計 stats 正規分布の固定化(変数に代入) n = norm(loc=100,scale=10) print( n.cdf(80) , n.pdf(80)) cdf (Cumulative density function : 累積分布関数)

確率・統計 stats 正規分布の固定化(変数に代入) n = norm(loc=100,scale=10) print( n.cdf(80), n.pdf(80) ) pdf(Probability density function : 確率密度関数)

確率・統計 stats 右図をプロットするプログラムコード from scipy.stats import norm import numpy as np n = norm(loc=100,scale=10) x = np.linspace(50,150,1000) y = n.pdf(x) plt.plot(x,y,label=r"$N(\mu=100,\sigma=10)$") plt.legend() plt.ylim((0,0.06)) plt.xlabel("x") plt.ylabel(r"$\varphi_{\mu,\sigma^2}(x)$")

確率・統計 stats 問題1: ある研究室でのコピー用紙の消費量は 需要200, 標準偏差120の正規分布にしたがうことがわかった。 コピー用紙の消費量の確率分布をプロットし確認しなさい コピー用紙の需要が80枚以下になる確率を求めなさい *プロットしたグラフをみて需要がどのような分布になっているか 考えて答えなさい

確率・統計 stats ガンマ分布 連続確率分布の一種で、2つの正のパラメータにより定義される。 形状パラメータ a:分布によって異なる。a=1のとき定義される分布は 指数分布となる。 尺度パラメータ scale

確率・統計 stats 確率変数オブジェクト(正規分布norm等)がもつメソッド rvs : 確率変数にしたがう擬似乱数を生成する - size : 乱数の数や配列の型を指定する n = norm(loc=100,scale=10) print('array=', n.rvs(size=5) ) print('matrix=', n.rvs(size=(2,3)) ) [ 103.8676344 101.00492908 80.95412543 100.09224013 102.21893118]

確率・統計 stats 確率変数オブジェクト(正規分布norm等)がもつメソッド rvs : 確率変数にしたがう擬似乱数を生成する - size : 乱数の数や配列の型を指定する n = norm(loc=100,scale=10) print('array=', n.rvs(size=5) ) print('matrix=', n.rvs(size=(2,3) ) ) [[ 114.90322183 78.01377207 91.91745997] [ 118.55049739 89.54314638 112.28480134]]

右歪Gumbel分布: 右側の裾野が長い確率分布 確率変数の最大値が漸近的に従う分布 確率・統計 stats 確率変数オブジェクト(正規分布norm等)がもつメソッド stats : 平均、分散、歪度、尖度を返す。それぞれの頭文字 mvsk を引数にす ることで返り値を決定する。 g = gumbel_r(loc=0,scale=1) print( g.stats(moments='mvsk') ) x = np.linspace(-3, 5, 100) y = g.pdf(x) plot(x,y); None 右歪Gumbel分布: 右側の裾野が長い確率分布 確率変数の最大値が漸近的に従う分布

右歪Gumbel分布: 右側の裾野が長い確率分布 確率変数の最大値が漸近的に従う分布 確率・統計 stats 確率変数オブジェクト(正規分布norm等)がもつメソッド stats : 平均、分散、歪度、尖度を返す。それぞれの頭文字 mvsk を引数にす ることで返り値を決定する。 g = gumbel_r(loc=0,scale=1) print( g.stats(moments='mvsk') ) x = np.linspace(-3, 5, 100) y = g.pdf(x) plot(x,y); None 右歪Gumbel分布: 右側の裾野が長い確率分布 確率変数の最大値が漸近的に従う分布

確率・統計 stats 期待値:確率を乗じた平均 分散:分布のばらつきを表す尺度 標準偏差:分散の平方根 歪度:分布の非対称性を表す尺度 - 歪度が正の分布は右側の裾野が長く、負の分布は左側の裾野が長くなる 尖度:分布の尖りを表す尺度 - 尖度が正の分布は正規分布に比べて山の山頂付近で尖って、裾野が長く、     負の分布は頂上付近が丸く裾野が短い形状をもつ

平均100、標準偏差10の正規分布にしたがう 需要をもつ商品に対しての品切れ率を 5%にするための在庫量 確率・統計 stats 確率変数オブジェクト(正規分布norm等)がもつメソッド ppf : パーセント点関数(確率分布関数の逆関数) print( norm.ppf (0.95, loc=100, scale=10) ) 平均100、標準偏差10の正規分布にしたがう 需要をもつ商品に対しての品切れ率を 5%にするための在庫量

確率・統計 stats 確率変数オブジェクト(正規分布norm等)がもつメソッド sf : 生存関数( ) print( norm.sf (123, loc=100, scale=10) ) 平均100、標準偏差10の正規分布にしたがう需要をもつ商品に対して、123個仕入れた時の品切れ確率を求める 1 - norm.cdf(123,loc=100,scale=10)と同値

確率・統計 stats 問題2: ある人気ラーメン屋では 平日の売り上げは平均150、標準偏差30の売り上げがあり ある人気ラーメン屋では 平日の売り上げは平均150、標準偏差30の売り上げがあり 休日の売り上げは平均200、標準偏差20の売り上げがある。 平日の品切れ率を5%にするためには何杯分のスープの在庫を仕込んでお くべきか。 休日の品切れ率を3%にするためには何杯分のスープの在庫を仕込んでお くべきか。

120個以上の需要xが発生したとき、x-120個分の品切れ費用がかかる 確率・統計 stats 確率変数オブジェクト(正規分布norm等)がもつメソッド 平均100、標準偏差10の正規分布にしたがう需要をもつ商品に対して120個仕入れたとき、 品切れ費用が1個当り100円、在庫費用が1個当り10円としたときの期待費用を求める def f(x): if x>120: return 100*(x-120) elif x<120: return 10*(120-x) print( norm.expect(f, loc=100, scale=10) ) 120個以上の需要xが発生したとき、x-120個分の品切れ費用がかかる

120個以下の需要xが発生したとき、120-x個分の在庫費用がかかる 確率・統計 stats 確率変数オブジェクト(正規分布norm等)がもつメソッド 平均100、標準偏差10の正規分布にしたがう需要をもつ商品に対して120個仕入れたとき、 品切れ費用が1個当り100円、在庫費用が1個当り10円としたときの期待費用を求める def f(x): if x>120: return 100*(x-120) elif x<120: return 10*(120-x) print( norm.expect(f, loc=100, scale=10) ) 120個以下の需要xが発生したとき、120-x個分の在庫費用がかかる

確率・統計 stats 確率変数オブジェクト(正規分布norm等)がもつメソッド expect : 引数として与えられた関数funcの分布に対する期待値を求める。 - func : 関数 lb : 下限 ub : 上限 def f(x): if x>120: return 100*(x-120) elif x<120: return 10*(120-x) print( norm.expect(f, loc=100, scale=10) )

確率・統計 stats 問題3(発展問題): ある人気ラーメン屋では 平日の売り上げは平均150杯、標準偏差30の売り上げがあり ある人気ラーメン屋では 平日の売り上げは平均150杯、標準偏差30の売り上げがあり 休日の売り上げは平均200杯、標準偏差20の売り上げがある。 また、 ラーメンは1杯730円 スープの在庫は器材の関係により150杯分しか持つことができない 在庫を超える売り上げ数が見込まれたときは機会損失として考え、 そのときの機会損失額は1杯あたり1000円とする。 このラーメン屋の平日・休日の機会損失額を含めた売り上げ高の期待値を求めよ

確率・統計 stats SciPyでは正規分布クラスnorm以外にも様々な確率分布の確率変数オブジェ クトを使うことができるが、本スライドでは省略する。

確率・統計 stats 3次元プロットについてはNumPyを参考に 多変量正規分布クラス multivariate_normal ax = Axes3D(figure()) s = .1 X = np.arange(-3, 3.+s, s) Y = np.arange(-3, 3.+s, s) X, Y = np.meshgrid(X, Y) pos = np.dstack((X, Y)) n = multivariate_normal([0.0, 0.0], [[1.0, -0.8], [-0.8, 1.0]]) n = multivariate_normal([0.0, 0.0]) Z =n.pdf(pos) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, norm=LogNorm(), cmap=cm.jet, linewidth=0.2); None 3次元プロットについてはNumPyを参考に

平均100、標準偏差10の正規分布にしたがう擬似乱数を10個生成 確率・統計 stats 最尤推定:最尤推定とは与えられたデータから確率分布のパラメータを推 定する方法である。 rvs = norm(loc=100,scale=10).rvs(size=10) print( norm.fit(rvs) ) 平均100、標準偏差10の正規分布にしたがう擬似乱数を10個生成

確率・統計 stats 最尤推定:最尤推定とは与えられたデータから確率分布のパラメータを推 定する方法である。 rvs = norm(loc=100,scale=10).rvs(size=10) print( norm.fit(rvs) ) >> ( 96.52001... , 8.42810...) 与えられたデータの標本数を増やすと 推定されたパラメータがどのように変化するか確認してみよう (推定された平均,推定された標準偏差)

返り値のタプルは(標準偏差,平均,決定係数) 確率・統計 stats probplot : データの分布を正規分布と比較する正規確率プロットを作成する。 データが正規分布にしたがっているかどうかを判断する基準線や決定係数 (相関係数)がプロットされる rvs = norm(loc=100,scale=10).rvs(size=10000) xy_pair, corr = probplot(rvs, plot=plt) print( corr ) 返り値のタプルは(標準偏差,平均,決定係数)

補間 interpolate 補間(interpolation)とは、特定の領域内に与えられた離散的なデータ点を もとに、同じ領域内の他の点を近似する連続関数を構築するための方法で ある。補間は内挿ともよばれ、与えられた領域外の点の近似を行うことを 外挿・補外とも呼ぶ。

補間 interpolate x = np.arange(-4,5) y = np.sin(x)/(1+x**2) plot(x, y, 'o'); None

補間 interpolate lagrange : ラグランジュ多項式による補間 (すべての点を通る多項式を一つ決定する) f = interpolate.lagrange(x, y) print(f) xnew = np.arange(-4,4, 0.01) ynew = f(xnew) plot(x, y, 'o', xnew, ynew, '-') ; None

補間 interpolate interpld : 1次元データに対する補間。引数kindで補間の種類を指定する f = interpolate.interpld(x, y, kind= 'cubic') xnew = np.arange(-4,4, 0.01) ynew = f(xnew) plot(x, y, 'o', xnew, ynew, '-'); None

補間 interpolate 補間の種類 線形補間:区分ごとに異なる線分でつないだ区分的線形関数 引数kindはlinear

補間 interpolate 補間の種類 最近点補間:最も近いデータ点の値をとる関数 引数kindはnearest

補間 interpolate 補間の種類 0次補間:データ         の値をとる関数 引数kindはzero

補間 interpolate 補間の種類 スプライン線形補間:与えられた複数の点を通る滑らかな曲線 引数kindはslinear

補間 interpolate 補間の種類 スプライン2次補間:与えられた複数の点を通る滑らかな曲線 引数kindはquadratic

補間 interpolate 補間の種類 スプライン3次補間:与えられた複数の点を通る滑らかな曲線 引数kindはcubic

補間 interpolate 例題: あなたはテーマパークからアトラクションの待ち時間の長さを依頼された。 待ち時間を30分おきに測定した結果は開園時刻を0としたPythonのリストと して、与えられている。開園から閉園までの任意の時刻における待ち時間 を推定するにはどのようにしたら良いだろうか。 *待ち時間は最後尾に並んでいる人がアトラクションの会場に入場するまで の時間と定義する

補間 interpolate y = np.array([80,90,90,100,110,110,90,90,90,90,90,80, 80,60,60,60,60,70,70,70,60,35,40,50,45]) x=np.arange(0,len(y)) f = interpolate.interpld(x, y, kind= 'cubic') xnew = np.linspace(0,len(y)-1,100) ynew = f(xnew) plot(x, y, 'o', xnew, ynew, '-', lw=1,ms=7); None データの入力

補間 interpolate 問題4(教科書129p問題12): ある新製品の毎日の需要量を調べたところ(教科書内の)表のよ うになっていることがわかった。ただし表内の – は需要を調べる のを忘れたことを表す。適当な補間を用いて、情報のない日の需 要量を予測せよ

補間 interpolate 問題4(教科書129p問題13): あるアトラクションの待ち時間の長さを行った。待ち時間を30分 おきに測定した結果は、開園時刻を0としたPythonのリストとし て以下のように与えられている。開園から閉園までの任意の時刻 における待ち時間をLagrange補間と3字スプライン補間を用いて 推定せよ。ただし、リスト内のNaNはアトラクションが休止中で あったことを表す。 *NaNをどのように扱うか考えよう

積分 integrate quad : 1重定積分を求める。引数は関数f, 積分区間[a,b] (積分における部分区間の上限limitはoptional) 返り値は積分値と誤差のタプル (total,error) = integrate.quad(f, 0,len(y)-1,limit=1000) print( total/len(y) ) 平均

積分 integrate f = lambda x: math.pi*x**2 底面の半径rが10cm、高さhが10cmの円錐の体積を求める f = lambda x: math.pi*x**2 print( integrate.quad(f, 0, 10) )

積分 integrate dblquad : 2重定積分を求める。積分範囲の下限と上限を引数に要する 中心までの距離 f=lambda x,y: math.sqrt( (x-0.5)**2 +(y-0.5)**2 ) g=lambda x: 0.0 h=lambda x: 1.0 print(integrate.dblquad(f,0,1,g,h)) print((math.sqrt(2)+math.log(1+math.sqrt(2)))/6.0) 数値でなく関数で与えなければいけないことに注意

理論値は「はじめての確率論」(近代科学社)を参考に 積分 integrate dblquad : 2重定積分を求める。積分範囲の下限と上限を引数に要する 中心までの距離 f=lambda x,y: math.sqrt( (x-0.5)**2 +(y-0.5)**2 ) g=lambda x: 0.0 h=lambda x: 1.0 print(integrate.dblquad(f,0,1,g,h)) print((math.sqrt(2)+math.log(1+math.sqrt(2)))/6.0) 理論値は「はじめての確率論」(近代科学社)を参考に

積分 integrate 問題5: 楕円 の面積 は以下の式で求められる 楕円 の面積を求めよ

積分 integrate 問題6 東京海洋大学 編入学試験より

積分 integrate 問題(発展問題): 面積1の円状の都市に一様に住んでいる人たちが、円の中心にあ るスーパーに行く時の距離の期待値を求めよ。 ちなみに理論値は である

線形代数 linalg 逆行列:A をn 次正方行列とするとA の逆行列は、 AB = BA = I を満たすn次正方行列Bである A = np.array([[1,-1,-1],[-1,1,-1],[-1,-1,1]]) print(linalg.inv(A)) print( np.dot(A,linalg.inv(A) )) 行列と逆行列のドット積(内積) は単位行列

LinAlgError : singular matrix 正則行列ではない行列の逆行列を求めようとすると... B = np.array([[2,-1,-1],[-1,2,-1],[-1,-1,2]]) print(linalg.inv(B)) print(np.dot(B,linalg.inv(B))) LinAlgError : singular matrix

線形代数 linalg 問題7 a = 3 のとき以下の問いに答えよ。 H26 東京海洋大学 個別学力検査より

線形代数 linalg 線形方程式を解く 線形方程式を行列とベクトルを用いて表現し、linalg.solveで解く A = np.array([[1,3,-2],[2,2,-1],[3,-1,1]]) b = np.array([-2,1,5]) print(linalg.solve(A,b))

線形代数 linalg 問題8 次の連立方程式を解きなさい。

線形代数 linalg 行列式(determinant):正方行列Aの行列式 det(A)を求める *行列式=0となる行列の実行例 A = np.array([[1,2,3],[4,5,6],[7,8,9]]) b = np.array([-2,1,5]) print(linalg.inv(A)) # エラー print(linalg.solve(A,b)) # エラー print(linalg.det(A))

線形代数 linalg 問題9 東京海洋大学 編入学試験より

線形代数 linalg ノルム:平面や空間上のベクトルの長さのこと。linalg.norm関数 によって様々なノルムを求めることができる 引数を変更した場合の、実行結果は教科書p137を参考に

線形代数 linalg 固有値と固有ベクトルを求める関数 linalg.eig : 固有値と固有ベクトルを求める linalg.eigvals : 固有値のみを求める A = np.array([[1,1,1],[1,2,3],[1,4,9]]) (v,X) = linalg.eig(A) print(v) print(X) V = np.diag(v) B = np.dot(X,np.dot(V,linalg.inv(X))) print(B) v : 固有値 X : 固有ベクトル

線形代数 linalg 問題10 東京海洋大学 編入学試験より