R言語と機械学習について
Rは、ベル研究所のJohm Chambersが発明したS言語をオークランド大学のRobert GentlemanとRoss Ihakaが1933年に改良し、発明したものとなる。R言語は高級言語で、最初からユーザーがコマンドを入力、結果を得て、他のコマンドを実行できる様に、インタラクティブ性を目的としていた。その後、システムに組み込まれることもできて、複雑な問題にも取り組む言語に発展している。
Rは、データの変換、分析に咥えてグラフィクスとレポーティングが生み出せる機能も追加され、データの抽出や変換、モデルの適用、推論と予測、結果の作図とレポートなど、データ解析におけるフルスタックに使われる様になっている。
またR言語には、機械学習アルゴリズムを実装するための多数のパッケージがあり、それらには、機械学習アルゴリズムの実装やモデルの評価、ハイパーパラメータの最適化などの機能も含まれている。また、R言語はデータ処理に優れた機能を持っているため、データの前処理や特徴量エンジニアリングにも適したものとなる。
最近では、深層学習にもR言語が使われるようになってきており、KerasやTensorFlowなどのライブラリを使用して、深層学習のモデルを構築することができる。また、R言語には、グラフィカルなデータの可視化に優れたggplot2パッケージなどもあるので、機械学習モデルの評価や可視化にも役立てることができる。
Rの人気は2000年台後半に急上昇し、学術界だけではなく、銀行、マーケティング、医療、政治、遺伝子やその他の業界に広がり、多くのアドオンパッケージ(Rの機能を拡張するライブラリ)が公開されてきている。
本ブログではこれらRについて様々な応用とその実装について述べている。
技術トピック
プログラミングを行うためには、それぞれの言語に合わせた開発環境を作る必要がある。ここでは、本ブログに述べているPython、Clojure、C、Java、R、LISP、Prolog、Javascript、PHPそれぞのケースでの具体的な開発環境の立ち上げについて述べている。個々の言語では、開発を容易にするためのプラットフォームが準備されており、それらを用いると容易な環境設定が可能となるが、ここでは最もシンプルなケースでのものを中心に述べている。
R言語とは統計解析向けのプログラミング言語及び開発実行環境で、ニュージーランドのオークランド大学により1993年に作られた比較的歴史のあるツールである。特徴としては、ベクトルや行列等の扱いが簡易でしかも高速に処理できることから、数学的処理アルゴリズムの構築が容易でしかも処理が早いこと。また計算することが主目的の為、比較的シンプルなプログラミングが可能であることなどがある。それらの特徴により世界中の研究機関で利用され、数多くのライブラリ(パッケージ)が作成/公開されており、2021/02/01現在では、17029パッケージが登録されているようである。このライブラリ数はpythonのそれの半分以下となるが、統計解析向けに特化された言語であることを考えると十分な量があると言っても良いのではないかと思う。
参考書も多々出版されている。和書ではブレット・ランツ氏の本を翻訳した「Rによる機械学習」、Jared P. Lander 氏の本を翻訳した「みんなのR データ分析と統計解析の新しい教科書」等。洋書では、O’Reilly社の「R In a nutshell second edition」、Packet社の「Statistical Analysis with R Beginner’s Guide」や「Big Data Analytics with R and Hadoop」springer社の「An Introduction to Statistical Learning:with Applications in R」等々ある。
Rの環境設定と簡単なクラスタリングの動作までを述べる。
今回はRとの連携について述べる。ClojureからRのライブラリへアクセスするツールは複数あり、以下のリンクにまとめられている。それぞれのツールの観点としては(a)提供されるAPIと構文解析、(b)使用されるRバックエンドの種類(JRI+REngine / Rserve+REngine / Opencpu / シェルからRを実行等)、(c) Rの「データフレーム」や「行列」と同等のものとしてClojureの概念が使われているか、もしそうなら、どのような概念なのか、がある。
これらの中で比較的安定して利用できるClojisrについて述べる。
プログラミングを行う際にファイルの入出力機能は最も基本的で必須なものとなる。またファイルの入出力機能は、手続き的な命令となるため、各言語ごとに実現の仕方も異なってくる。以下に様々な言語でのファイル入出力の具体的な実装について述べる。
プログラミング言語の中でも基本機能は、”プログラミング言語の歴史“でも述べた「構造化言語」の3つの機能である(1)順次進行、(2)条件分岐、(3)繰り返しの中の一つの要素となる。ここではこの内繰り返しと分岐に対して様々な言語での実装を示す。
Rを使った階層クラスタリングについて述べる。
今回は非階層クラスタリングであるk-meansについて紹介する。
Rを使った決定木によるクラスタリングについて述べる。
Rを使ったルール抽出について述べる
LightGBMは、Microsoftが開発したGradient Boosting Machine(GBM)のフレームワークであり、大規模なデータセットに対して高速かつ高精度なモデルを構築できるように設計されている機械学習のツールとなる。ここではpyhton、R、Clojureでの実装について述べる。
一般化線形モデル(Generalized Linear Model, GLM)は、統計モデリングや機械学習の手法の一つであり、応答変数(目的変数)と説明変数(特徴量)の間の関係を確率的にモデリングするために使用されるものとなる。ここでは、この一般化線型モデルの概要と各種言語(python、R、Clojure)による実装について述べる。
時系列データとは、株価や気温、トラフィック量などの時間の経過に応じて値が変化するデータのことを呼ぶ。この時系列データに対して機械学習を適用することで、大量のデータを学習し、未知のデータに対する予測を行うことで、ビジネスの意思決定やリスク管理などに役立てることができる。ここではpythonとRを用いた時系列データの実装について述べている。
時系列データとは、株価や気温、トラフィック量などの時間の経過に応じて値が変化するデータのことを呼ぶ。この時系列データに対して機械学習を適用することで、大量のデータを学習し、未知のデータに対する予測を行うことで、ビジネスの意思決定やリスク管理などに役立てることができる。今回はそれらのアプローチの中で状態空間モデルを中心に述べる。
ダイナミックファクターモデル(Dynamic Factor Model, DFM)は、多変量時系列データの解析に用いられる統計モデルの一つであり、複数の時系列変数を共通の要因(ファクター)と個別の要因(スペシフィック要因)に分解することにより、データの変動を説明するものとなる。ここではこのDFMに対して、様々なアルゴリズムと適用事例およびRとPythonによる実装について述べている。
ベイズ構造時系列モデル(Bayesian Structural Time Series Model; BSTS)は、時間とともに変化する現象をモデル化する統計モデルの一種であり、予測や因果推論を目的として利用されるものとなる。ここではこのBSTSに関しての概要と様々な応用事例及び実装例について述べている。
ベクトル自己回帰モデル(Vector Autoregression Model, VARモデル)は、統計学や経済学などの分野で使用される時間系列データのモデリング手法の一つです。VARモデルは、複数の変数が相互に影響し合う場合に適用されるモデルとなる。一般的な自己回帰モデル(Autoregression Model)は、ある変数の値をその過去の値の線形結合として表現するモデルで、VARモデルはこのアイディアを複数の変数に拡張したものとなり、複数の変数の過去の値を使って現在の値を予測するモデルとなる。
ゲーム理論とは、競争や協力など、相互に影響を与えあう複数の意思決定者(プレーヤー)が存在する場合に、彼らの戦略とその結果を数学的にモデル化することで、最適な戦略を決定するための理論となる。これは主に経済学や社会科学、政治学などの分野で用いられている。
ゲーム理論のアルゴリズムとしては、ミニマックス法、”モンテカルロ木探索の概要とアルゴリズム及び実装例について“でも述べているモンテカルロ木探索、深層学習、強化学習等様々な手法が用いられている。ここでは、R、Python、Clojureでの実装例について述べる。
粒子群最適化(Particle Swarm Optimization、PSO)は、鳥や魚の群れの行動をモデル化し、自然界の群れの動きに着想を得たもので、進化計算アルゴリズムの一種であり、複数の個体が群れを形成し、最適解を探索する手法となる。PSOは、局所解に陥りやすい遺伝的アルゴリズムよりも、より広範な探索空間を探索できることが特徴となる。また、他の進化計算アルゴリズムよりも計算時間が短く、高速に最適解を見つけることができることがある。PSOは、機械学習や最適化問題の解決に広く用いられており、多数の研究や実用例が報告されている。
Causal Forestは、観測されたデータから因果効果を推定するための機械学習モデルであり、ランダムフォレストをベースにしており、因果推論に必要な条件に基づいて拡張されたものとなる。ここでは、このCausal Forestの概要と適用事例およびRとPythonによる実装について述べている。
位置情報の機械学習アプローチであるQ-GISとRとの連携について述べる。
Rでのベイズモデルの実装(KFASとfield)について
Rを使ったPCAの実装について
Rを使ったベイズ推定であるSTANの紹介
- Rでのglmnetやgenlassoを用いたlassoの実践 スパースモデリングの適用
Rを使ったスパースモデリングであるgenlassoやlassoについて
- RによるSVD、PMD、NMFの実践 スパースモデリングの実践
スパースモデリングとしてのSVD(特異値分解:Singular Valu Decomposition)、PMD(スパース行列分解:Penalized Matrix Decomposition)、NMF(非負値行列因子分解:Non-negative Matrix Factorization)の実践例
SVMはデータ解析の標準的なツールとなり、様々な分野で応用されている。多くの統計解析ソフトウェアにおいてSVMが実装され、小・中規模のデータに対して、簡単に利用できるようになっている。ここでは統計解析環境Rのkernlabパッケージについて述べる。
一方、大規模なデータに対してSVMを利用したり、目的に応じて一部を変更したりする場合には学習アルゴリズムの実装に関する知識を持っておくことが必要となる。ここでは、この目標を踏まえ、LIBSVMと呼ばれるSVMソフトウェアの実装について詳しく述べる。LIBSVMは国立台湾大学のC.J.Lin教授のグループが作成・管理しているもので、このソフトウェアはC++で実装され、コードが公開されているため、目的に応じた修正や他のシステムとの統合なども比較的容易に行える。
Rで状態空間モデルを扱うパッケージとしてよく使われるものがdlmとKFASとなる。両者とも、カルマンフィルタによるフィルタリング・平滑化・予測が可能となるが異なる点もある。ここでは、dlmパッケージを使った状態空間モデルによる解析について述べる。dlmは、Giovanni Perris氏が開発しているパッケージとなる。状態空間モデルのうち、線形・正規分布の動的線形モデル(dynamic linaer model)を扱う。
前回のdlmで解析したデータは明らかに季節変動があるので、季節調整分を加えたモデルとしてみる。dlmで季節調整成分を扱うには、dlmModSeas関数またはdlmModTrig関数を使用する。前者はダミー変数により季節調整成分を表現し、後者は三角関数を利用する。ここではdlmModSeas関数を使用した。
KFASは、jouni Heleke氏が開発しているパッケージとなる。dlmと異なる点として、Rtという係数行列がシステムノイズにかかっているところで、これは、どの状態にシステムノイズを加えるのかを選択するためのものとなる。
KFASでも、前述と同様の季節調整モデルを解析する。KFASではSSModel関数でモデルの定義を行う。KFASでも、dlmと同様に、関数を組み合わせてモデルを構築していく。下のコードでは、多項成分を扱う関数のSSMtrendと、季節調整成分を扱う関数のSSMseasonalとを組み合わせてモデル化している。SSMtrendは、dlmのdlmModPolyに相当する関数で、degree引数に1を与えて、ローカルレベルモデルとしている。
「粒子フィルタ」をR言語でパッケージを使わずに作る。フィルタリングだけなら、初期化やパラメータ設定の部分を除くとほぼ3行で書ける。基本的にはデータ(観測値)に対して、時刻tでの観測に近い粒子ほど重みが大きくして、リサンプリングのステップで選ばれやすくなり、その結果データに近い経路が得られる。このとき、各時点の粒子の分布が、モデルから求めた事後分布(より正確にはフィルタリング分布)を表現しているということになる。
ある時系列から別の時系列に対して因果関係があるかという問いは、少なくとも2つの時系列データが関心事であることを前提としている。時系列に基づく因果推論は、本質的に多変量時系列の問題であり、モデルとしては多変量自己回帰モデル(Vector AutoRegression model, VARモデル)が用いらられることが多い。
ここでは、内閣支持率と株価の因果関係を例に、VARモデルに基づく因果関係の分析の手順を、フリーソフトウェアRを用いて述べる。データにはしばしば欠損が伴うが、今回取り上げる内閣支持率も例外ではない。ここではRのtimsacパッケージに含まれる関数decompを使った欠陥値補間を取り上げる。またVARモデルによる因果分析では時系列の定常性を仮定するので、定常・非定常のチェックや、定常化のための前処理が必要となる。そのための手順とそこで用いられる単位根検定(unit root test)の使い方についても述べる。制御なし/制御付きVARモデルの推定、ラグ選択、因果検定、インパルス応答関数の算出などには、Rのパッケージvarsを利用する。
ここでは、時系列の因果性を分析する枠組みとして、多変量自己回帰モデル(VARモデル)を導入する。RパッケージでVARモデルを扱うことができるものがいくつか存在するが、ドキュメントも充実していてよく使われるものはBernhard Pfaffによるパッケージvarsとなる。時系列ytを予測するのに、他の時系列xtの過去の値が役に立つとき、時系列xtからytに「グレンジャーの意味で因果性がある」という。
-
R/Stan でコーシー分布を利用した変化点検出(外部リンク) Stan を使うことで、時系列データの変化点を検出することができる。R に組み込まれた時系列データセットの中に、ナイル川の流量データ(Nile)というものがあり、1898 年と 1899 年の間に急に変化したことが知られている。このページではナイル川の流量データを利用して、変化点を検出する方法を示す。
コメント
[…] 今回は行列分解によるリコメンデーションの例として、Rのarulesパッケージに収録されている”Groceries”というサンプルデータを利用する。このデータはあるスーパーマーケットで一ヶ月間に記録された9835件169カテゴリ(55種類の中分類と10種類の大分類を持つ)の購買データからなり、それぞれのかてごりにおける勾配の有無をture/falseの論理値で保存したものとなる。 […]
[…] 機械学習の汎用的なツールとしてのR言語の概要 | Deus Ex Machina より: 2021年9月5日 8:50 AM […]
[…] 今回は実際のR を使ったクラスタリングについて紹介する。 […]
[…] 前回までで、Rのインストールからデータの導入、そして実用的な機械学習の応用として使われる頻度の高いクラスタリングについて、データの準備までを述べた。今回はその続きとして、階層クラスタリングでの学習と評価について述べる。 […]
[…] 前回はRでのクラスタリングの例として、階層クラスタリングについて紹介した。今回は非階層クラスタリングであるk-meansについて紹介する。 […]
[…] ブレット・ランツによる「Rによる機械学習」から、「第5章 分割統治– 決定木と分類ルールを使った分類」より。前回は決定木のアルゴリズムの概要について述べた。今回はRを使ったクラスタリングについて述べる。 […]
[…] ブレット・ランツによる「Rによる機械学習」から、「第5章 分割統治– 決定木と分類ルールを使った分類」より。前回はRでの決定木のアルゴリズムの概要について述べた。今回はルール分類器を使ったルールの抽出について述べる。 […]
[…] ここで実際にRを使って主成分分析を行ってみる。参考としたのは馬場真哉さんの「主成分分析の考え方」より […]
[…] 実際にStanを使うには、Rの’RSatn’と言うツールをインストールして利用する。 […]
[…] 岩波データサイエンスシリーズ「スパースモデリングと多変量データ解析」より。前回はlassoを用いたスパース推定とそれらの計算手法について述べた。今回はRのスパースモデルツールであるglmnetやgenlassoを用いたlassoの適用について述べたいと思う。 […]
[…] スペクトラムクラスタリングの実行は上記をコード化するか、python(sklean)やR、Clojure等の様々なプラットフォーム上のライブラリを利用して行うものとなる。 […]
[…] デジタルトランスフォーメーションサマリー 人工知能技術サマリー 機械学習技術サマリー ユーザーインターフェースサマリー R言語サマリー 地理空間情報処理サマリー […]
[…] 実際にStanを使うには、Rの’RSatn’と言うツールをインストールして利用する。 […]
[…] 実際にStanを使うには、Rの’RSatn’と言うツールをインストールして利用する。 […]
[…] R言語と機械学習 […]
[…] R言語と機械学習 […]
[…] 時系列データ解析 Rと機械学習 […]
[…] 時系列データ解析 Rと機械学習 […]
[…] 時系列データ解析 Rと機械学習 […]
[…] 機械学習の領域では、PythonやRのような豊富なライブラリーを持つ環境が利用されててほぼデファクトとなっているが、これに対して初期(2007年〜2017年頃)のClojureでは、CやPython、R等と繋げるしくみも開発されていたが、相手先のライブラリを自由に扱えるレベルではなく、最新のアルゴリズムを駆使することにハードルがあった。 […]
[…] 画の推薦システムの実装。Rの環境構築に関しては”R言語と機械学習“を参照のこと。 […]
[…] 深層学習技術 一般的な機械学習 R言語と機械学習 ノイズ除去と欠損値補間 […]
[…] 深層学習技術 一般的な機械学習 R言語と機械学習 Python […]
[…] 関係データ学習 アルゴリズムとデータ構造 数学 プログラミング技術 R言語 一般的な機械学習 構造学習 […]
[…] 機械学習の領域では、PythonやRのような豊富なライブラリーを持つ環境が利用されててほぼデファクトとなっているが、これに対して初期(2007年〜2017年頃)のClojureでは、CやPython、R等と繋げるしくみも開発されていたが、相手先のライブラリを自由に扱えるレベルではなく、最新のアルゴリズムを駆使することにハードルがあった。 […]
[…] 深層学習技術 トピックモデル マルコフ連鎖モンテカルロ法 python R言語 異常検知・変化検知技術 時系列データ解析 […]
[…] 機械学習の汎用的なツールとしてのR言語の概要 | Deus Ex Machina より: 2023年6月13日 4:30 AM […]
[…] 自然言語処理技術 知識情報処理 Clojure Python PHP Prolog LISP R言語 C/C++ Javascript JavaとScalaとKoltlin CSS […]
[…] ベイズ推論とMCMCのフリーソフト MCMC 確率的生成モデル Python R Clojure […]
[…] 機械学習の汎用的なツールとしてのR言語の概要 | Deus Ex Machina より: 2022年6月2日 4:27 AM […]