サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
blog.statsbeginner.net
LightGBMにおけるカテゴリ変数の扱いについてググっていたら、以下のような投稿があった。 [SOLVED] How exactly does LightGBM handle the categorical features? | Kaggle この投稿のなかで、いろいろ参考になるリファレンスが貼られている。 max_cat_to_onehot (default = 4, type = int, constraints: max_cat_to_onehot > 0) when number of categories of one feature smaller than or equal to max_cat_to_onehot, one-vs-other split algorithm will be used Parameters — LightGBM 4.2.0.99 docum
★めぼしいコーパスをまとめてダウンロードしてクリーニングして統合するPythonのコードを最後にのせてます。 ★少しソースを増やして、最終的には後日のエントリに書いてあるようなコーパス構成にしました。 日英対訳の(なるべく)綺麗なデータを得たい Transformerで機械翻訳をやろうと思ったのですが、てっとり早く試すだけの場合、綺麗な演習用データが配布されてる「英語-ドイツ語」や「英語-フランス語」のデータセットを使う人が多いんじゃないでしょうか。 でもそれだと、性能が実感できないので、なんとか「英語 ⇒ 日本語」の機械翻訳を実践したいと思いました。 そこでネックになるのが、 品質がよくて 分量が十分で 無償配布されている という条件をみたす対訳コーパスが、都合よくあるわけではないということです。 下記のページにいろいろまとまってるのですが、少なくとも私が確認した無償のものに関しては、ど
ChatGPTとのやり取りで一番楽しいのは、やっぱり、プログラミングを教えてもらうことですね。 今回は、とあるアニメーションの作り方を教えてもらいました。下にそのやりとりを掲載しておきますが、コードの中身は読み飛ばして、文章でのやり取りの部分と出力されたアニメーション動画を見るだけでも、ChatGPTにプログラミングを教わるとはどういうことなのか雰囲気がある程度分かるんじゃないでしょうか。 ポイントは、一発で何かが出来上がるのではなく、疑問をぶつけながら一緒にコードを完成させていく感じになるところですかね。今回の例だともはや、単にアニメーションの作成を依頼してるだけになってて、私はコードをほとんどみてませんが(笑) ちなみに私はChatGPTに、 言葉で指示した内容を実現するコードを書いてもらう 読み解くのがめんどくさいコードを与えて意味や構造を説明してもらう あるコードを実行してエラーが
ChatGPTの「GPT」はGenerative Pretrained Transformerの略であり、TransformerというのはGoogleが2017年に発表した『Attention is all you need』という論文で提案されたディープラーニングの画期的なアーキテクチャで、その論文のタイトル通り「Attention」という機構だけを使い倒している点が特徴的である。 ……という話は色々なところで紹介されているのだが、私のような素人が読むと誤解してしまうような記述も少なくない。 「仕組みを分かっていない人がいい加減な説明をしている」というよりは、「仕組みをよく知っている人が、素人の気持ちをあまり考えずに説明している」という感じで、悪気は全くないと思うし誤解するのは不勉強なこちらが悪いのだが、読むほうとしては困ることも多い。 そこで、にわか機械学習ユーザである自分がall y
Rの指数表示の回避方法 以前、別のブログのほう(リンク)で、Rの指数表示の回避を行う方法についてのエントリを書いたのですが、せっかく統計とRに関するブログを書き始めたので、こっちに転載しておきます。 元の記事ではいろいろ悩んだ過程を書いてるのですが、なんとR-1.8.0のリリースノートの日本語訳をされていた方がコメントを下さって、一瞬で解決しました。記事のほとんどの部分は結果的に無駄になったのでw、疑問の部分と、コメントによって解決した結論だけ書いておきます。 元のエントリからの部分的コピペ(一部修正済み) Rで桁数の大きい数値を表示しようとすると、指数表示になってしまうのがウザいと思いました。 > 1000000000 #10億 [1] 1e+09 みたいな感じです。まぁこれはExcelでもよくあることで、べつに指数表示になっていても単に数字を見るだけなら構わない場合もあるんですが、計算
昨日、ツイッターで「大学生のための100人100冊」という、いわゆる「必読書リスト」を紹介するツイートが流れてきました。20世紀の著作を集めたものなので、「古典」というほど古くないものも多いですが、でもまあ「古典」に近いものが多いとは言えるでしょう。 大学生のための100人100冊というpdfが公開されており、「全部読みたーい💕」となった https://t.co/MOUQLNLGQR pic.twitter.com/3ZX5nY4uos— ふくさんのグッドフクサニティ賞 (@fukusanity) June 13, 2022 100冊といいながら120冊載っているのですが、結構いいリストだと思いました。といっても、自分が読んだことあるものを数えてみたら33冊しかなかったので、「お前に良し悪しは判断できんだろ」と言われればその通りなのですが、読んだことがなくても聞いたことはあったり、同じ
吉野家の役員のくだんの発言については、特に非難したいとも擁護したいとも思わず、「生娘をシャブ漬けにしてる暇があったらうちの職場の近くに店をつくってくれ」ぐらいの感想なのだが(飲食店がほとんどないので)、「シャブ漬け」という喩えはそれなりに耳にする割に、えらい勢いで世間が怒っているなと感じた。まぁ、「生娘」のほうに怒っている人が多いのかもしれないが。 マーケティングの先生が、 あくまで(いちマーケティング学者の)私見ですが、マーケティング界隈において「シャブ漬け戦略」という用語は全くもって流通していませんし、通常「内輪」ですら使われていないと思います。— 関大岩本ゼミのアドミン (@AkinoIwamo) April 19, 2022 とおっしゃっていて、それはそうだろうと思う一方で、「しかし『シャブ漬け』っていう比喩はそれなりに聞くけど、どんな場面だっけ?」としばらく悩んで思い出したのだが
私が住んでいる町では、「ステップワイズ法で、ただし特定の変数は残るようにした上で、最良のモデルを選択してほしい」と言われ、手法の妥当性を説明するのが難しいので気が進まないものの、やらざるを得ないことがあります。 ここにやり方が載っていて、 以下、ロジスティック回帰の例でやってみます。 library(dplyr) d <- iris # 従属変数を2カテゴリにして、値を0,1に変換しておきます(しなくてもいいけど) d <- d %>% mutate(Species = as.numeric(Species)-2) %>% filter(Species != -1) # まず、すべての変数を入れたロジスティック回帰 full.model <- glm(Species ~., family = binomial(logit), data = d, ) summary(full.model)
Rでの季節調整をやってみます。 季節調整は、arima関数のseasonal引数を指定したSARIMAモデルや、stl関数でできてそっちは簡単なのですが(参考1・参考2・参考3)、一般的にアメリカ商務省センサス局の「X-12-ARIMA」とか「X-13ARIMA-SEATS」とかが有名なので、それを使ってみようと思います。 1965年に開発された「X-11」は移動平均をつかった成分分解法で、これにRegARIMAモデルをつかって事前にデータ補完する機能などを加えたX-12-ARIMAが1996年に開発され、さらに2012年に、X-11とは別系統の技術として利用されてきたARIMAモデルベースの分解方法であるSEATSを選択肢として使えるようにしたX-13ARIMA-SEATSがリリースされた……ということらしい。なのでX-13はX-12が新しくなったというより、X-12とは別の技術も使える
不偏分散の平方根を取っても不偏標準偏差にはならないという話があり、私は不真面目な研究者なのでそもそもそんなこと考えたこともなかったですが、知り合いが「数学的な導出はみれば分かるが、“平方根を取っては駄目な理由”が直観的に理解できなくて気持ち悪い」と言っていました。 ちなみに↓の記事によると、「不偏分散の平方根」を「不偏標準偏差」と記述しているケースはけっこうあるらしく、統計ソフトの計算もそうなってるらしいです(自分では確認してないですが)。 不偏分散の平方根は不偏標準偏差じゃなかった - 静粛に、只今統計勉強中 不偏標準偏差とは?:統計検定を理解せずに使っている人のために で、ググってみたら下記のような解説があり、 Econometrics Beat: Dave Giles' Blog: Unbiased Estimation of a Standard Deviation 要するに直観的
最近になって遅ればせながらggplot2を頻繁に使うようになってきました。 で、↑こういうふうに、折れ線の端っこにラベルを置きたいと思いました。白黒の記事原稿で4本もの折れ線を重ねるのは見づらいのでそもそもやめたほうがいいですが、人生いろいろあるわけです。 そして、ggplot2の線種は見分けがつきにくいので、凡例だけで示すのは難しい。 ググると解説ブログがいくつか見つかりますが、パット見では何をやっているのか意味がわかりやすくない気もしたので、メモしておきます。 考え方としては、 ggplot2の他にggrepelパッケージを入れておく。これは互いに重ならない「いい感じのラベル」を書くときに使うもの。 x軸の範囲を左右に少し広げておく。 折れ線の末端を「点」とみなして、そこに新たに散布図を描くようなイメージで、geom_text_repelでテキストを置く。 散布図にnudge(点とラベ
さっき、Rで棒グラフと折れ線グラフを重ねたものを作ろうとして、けっこう手間取りました。最終的に描いたのは↓のようなものなのですが。 「2軸グラフの書き方」「種類の異なるグラフの重ね方」についていろいろ調べたところ、barplot()とplot()を組み合わせるやり方もあるんですが、ggplot2でやるほうがやりやすかったです。以下、まず単なる2軸グラフの書き方をおさらいした後で、棒と折れ線を組み合わせる方法をメモしておきます。 2軸グラフの作り方 左右の軸をつかってスケールの異なるグラフを重ねたいだけなら、さほど難しくはなく、plot()ですぐできます。 例えば折れ線グラフを2つ重ねたいのだとしたら、まず1つめの変数のグラフを軸無しで書いたあとに、x軸と左軸を描く。その後、par(new=T)で、2つめの変数のグラフを軸なしで重ね描きした上で、右軸を描けばいいです。 で、最後にbox()で
ツイッターで尋ねられて、自分でも気になったので設定してみました。 Macでスクリーンショットを撮るときに、ショートカットキーを工夫して、保存先を振り分ける設定です。 Macのスクリーンショットは、じつはいろいろオプションがあって、ウィンドウ単位で撮影するときに影をつけるかどうかとかも変えられるのですが、私は基本的には、 shift+command+3(全画面を撮影) shift+command+4(インタラクティブモードで範囲を指定して撮影。space) の2パターンしか使いません。 で、仮に用途に応じて2つのフォルダに振り分けたいとすれば、計4つのショートカットがあればいいことになります。振り分けるフォルダは、仮に、 "~Desktop/ScreenShot1" "~Desktop/ScreenShot2" だとしておきます。 どうやってショートカットをつくるかというと、 処理自体は、シ
↓このページに、Rで文字列を操作する系のコマンドが色々載っていました。 文字列 | Rを利用して文字列のマッチング,結合,分割,置換を行う関数 これを参考に、データの全角数字を半角数字に入れ替えるというのをやってみたいと思います。 そういえば、はてなブログで >|r| ||< で挟む記法を使うと、ソースコードに色がつくというのを今日知りました。rが大文字だと駄目らしい。デフォルトだと折り返しが無効になって、長い行があると横スクロールが発生します。 プログラマの人とかは改行場所をコントロールしたいので折り返し表示を嫌うようですが、私はべつに複雑なコードは書けませんしこのブログは横幅が狭いので、CSSでpre{word-wrap: break-word;}と設定して折り返しありにしておきました。 さて。 データとしては、郵便局のサイトにある「事業所の個別郵便番号データダウンロード」ってのを使っ
めちゃくちゃ簡単なしょうもない内容ですが、あとで個人的に使うので、ジニ係数を出す簡単な関数をメモしておきます。 ここでは例として、都道府県の人口データのジニ係数を出してみます。 データを小さい順に並べて、都道府県数の累積(これは単順番を表すindexと同じになる)の累積構成比をx軸、人口の累積構成比をy軸にとったのがローレンツ曲線で、そっから三角形とスイカ形の面積比を求めるわけですね。 > # 北海道から沖縄県までの人口(千人単位)が順番に入ったデータ > print(pop) [1] 5286 1263 1241 2316 981 1090 1864 2877 1946 [10] 1952 7330 6255 13822 9177 2246 1050 1143 774 [19] 817 2063 1997 3659 7537 1791 1412 2591 8813 [28] 5484 1
GDPは「四半期速報値」というのが作成されており、前の四半期との比(たとえば2019年7-9期と10-12月期の比)を4乗したものが、「年率換算」の成長率として報道などで使われている。最新の速報では、2019年10-12月期の実質GDPが、年率換算でマイナス7.1%と大幅な減少を記録したと報道されていた。 この、四半期成長率を4乗した値というのは、トレンドが安定していればもちろん年率の成長に一致するが、短期的な変動が4乗されるわけなので、けっこう大きく上下する。 以下は、ちょっとわかりにくいが、実質GDPの -年間(暦年)の成長率[黒い線] -四半期成長率を「年率換算」したもの(前期比の4乗)[赤い線] -四半期GDPを4倍したものと、前年の年間GDPの比[青い線] をグラフにしたものだ。四半期はいずれも季節調整済み。 データは、暦年GDPについては平成30年度の国民経済計算年次推計、四半
初歩的な話ですが、今日学生から訊かれたので例を考えてみました。 AICがマイナスの値になってもいいんだっけ?みたいな話です。 AICがマイナスに 統計モデルの最尤推定をする場合、尤度は1より小さい場合が多く、したがって対数尤度が負である場合が多いとしましょう*1。特に離散変数では必ずそうなります。その場合、AICは「-2×(対数尤度-パラメータ数)」なので、正になるでしょう。 でも、対数尤度が正でAICが負になることというのも、連続変数ではあり得ます。その場合AICは、負で絶対値が大きいほどよい、ということになる。 誤差の分布は正規分布だと考えているとして、たとえば、 モデルの当てはまりがめちゃめちゃいい そもそも数値の単位が小さい というような場合に、誤差の標準偏差(分散)の値が小さくなって、結果的にAICが負になりやすくなりますね。 正規分布の確率密度 統計モデルの誤差が平均ゼロ、標準
plmパッケージとpanelvarパッケージ 最近、パネルデータを扱うことが増えてきたのだが、パネルデータで動学的な(つまりt-1期とかのラグ項が出てくる)分析をやろうとすると最小二乗法ではなくGMM推定量を用いる必要がある。 備忘として、動学的パネルデータ分析(ダイナミックパネル分析)の基本的な考え方とRのパッケージの使いかたをここにメモしておこうと思う。といっても自分自身の理解もだいぶあやふやで、色々間違いもありそうなので、お読みになった方から指摘いただけると大変助かります…(汗) Rの場合、結論から言うとまずは{plm}パッケージを使うのがいいと思う。いわゆる「パネルVAR」の形で分析したいなら、2018年に開発されたらしい{panelvar}パッケージを使うことができるのだが、後述するとおり{panelvar}のほうにはまだ不便なところもあって、今のところ、なるべく{plm}ででき
学生の分析を手伝っていたところ、突然、Rでピボットテーブルみたいな集計をしたくなりました。 度数分布表はtable関数でつくれますが、ピボットテーブルってどうやるのかな、と。 ググるといろいろやり方が出てきますが、とりあえず、{dplyr}のgroup_byと{tidyr}のspreadを使うとできました。(もっと簡単な方法ありそうなので誰か教えて下さい。) あと、実はその前段で、年齢のデータを「10代、20代、30代」みたいに階級別したかったので、そこには{berryFunctions}というパッケージのclassify関数を使ってみました。 まずパッケージを読み込みます。 {psych}の中に入っているTal_Orというデータセットを使います。 dplyrとtidyrは、tidyverseでもいいと思います。(両方まとめて入ります。) > library(psych) # データセット
よく忘れることのメモです。 NAかどうかの判定にはx==NAとかではなくis.na(x)を使う 要素に含まれるかどうかの判定は、%in%かis.element()を使う。これはデータ全体の中から何かを抽出するときの条件を複数条件にしたい場面でも使えるときがある。(たとえば簡単なところでは、subset()でデータフレームから条件付の抽出をするとき、&で条件を並べなくてもよくなったりとか) > is.element(3, c(1,2,3)) [1] TRUE > 3 %in% c(1,2,3) [1] TRUE {dplyr}でデータフレームを操作した後、as.data.frame()で標準のデータフレームに戻してからじゃないと、別の関数に与えたときにエラーが出る場合がある {data.table}のfread()関数でcsvとかを読み込んだ場合も、それを標準のデータフレームにしてから使わな
Macで画像ファイルをまとめてPDFにしたいとき、従来はAutomatorを使ってワークフローを組んでいました。 ところが、いつからか知らないですが、OSに標準でそういう機能が付けられていたようです。 ついさっき、ある人から、とある論文のPDF入手を頼まれたのですが、諸事情により画像ファイルでしか閲覧できないので、これをPDF化しようとしていて気づきました。 上のように、ファインダーで複数の画像を選択すると、右下のところに(これはサービスというやつですが)「PDFを作成」というボタンがあって、これを押すと選択した画像をまとめたPDFがそのフォルダに作成されます。 これは神!と思ったのですが、どうも、ファインダーで選択した順番にPDFに入っていくようです。 個人的には、どちらかといえば「選択したやつ全部を名前の順にソートしてPDF化」あるいは「フォルダ内の画像を名前順にまとめてPDF化」した
以前も書いたんですが、p値が0.05を下回るかどうかにとらわれる慣習を問題視する人が最近は増えてきていて、たしかにその理由はよく理解できる一方で、p値が過剰にバッシングされている気もします。しかしそんなことより、個人的には、なぜ統計的有意性の判定基準が多くの分野で慣例的に0.05(5%)になっているのかという、その由来のほうが気になります。 帰無仮説が正しいときにそれを棄却してしまう(第一種の過誤と呼ばれる)危険率が5%未満であれば「統計的に有意」と言われるわけですけど、この5%という閾値に客観的な必然性がないことは誰でも分かりますね。しかし実際には様々な分野で、5%基準で検定結果を報告(あわせて1%基準や10%基準での有意性も報告されたりはする)している研究が多数存在するわけです。 この5%という基準の由来について、フィッシャーが「20年に1回ぐらいは間違っても研究者として許されるだろ」
先日、『gretlで計量経済分析』という本に載っている二段階最小二乗法の演習をRでやってみるエントリ(リンク)を書いたのですが、同じ本の次の章は「マクロ計量モデル入門」となっていて、1980年から2009年までの日本経済のデータを用い、5本の構造方程式と2本の定義式、7つの内生変数と9つの外生変数からなる超小型のマクロ計量モデルをつくるというものでした。 Rで連立方程式を解く方法の確認がてら、Rで実行してみます。 最近、研究室の学生にRの使い方をイチから教えてるのですが、これをさらに単純化して練習問題に使えるかも……? データは本のサポートページからダウンロードできるものですが、「model.gdt」というファイルをgretlで読み込んでcsvで書き出したものを、Rに読み込ませて使いました。 準備 データは↓のようなイメージです(画像は一部です)。 library(lmtest) libr
『gretlで計量経済分析』という教科書があって、入門的な統計分析を非常にわかりやすく解説していると思いました。 学部レベルの人に統計分析を教える上では、関心の対象が政治や経済なのであれば、こういう「経済ネタ」で統計学が学べる本が良いのかもしれない。(私は最初は心理学系の本で勉強した。) gretl(グレーテル)というソフトの使い勝手は私はよく知りませんが、見た感じ、初学者向けにはGUIもわかりやすくて良いんじゃないでしょうか。 ところで、第8章でごく簡単なマクロ経済モデルを材料にして二段階最小二乗法を実行するという演習があり、内生性の問題とその解決法としての操作変数法・二段階最小二乗法について説明するのに、なかなか分かりやすい事例だなと思いました。 しかし、gretlを使っていく予定はないので、以下のようにRで実行しました。 OLSでの推定 以下のように超単純なマクロモデルを考える。 C
採用の当事者へヒアリング さっき就活エントリを書いたついでに、10年ぐらい前に別のブログに書いたネタを再掲しておこう。 食品会社や製薬会社を狙って研究・開発職志望で就職活動を始めた▲▲大学のA子さんから、エントリーシートの書き方とか面接での自己PRの仕方について、軽く相談を受けたことがあった。全然業種が違ったんだけど、私はもう就職してたから一応コメントするみたいな。 で、たまたま私は、某大手食品会社の人事部採用担当にB子という知り合いがいたことを思い出して、そいつに「採用側の視点から何かアドバイスしてやってくれ」と、ヒアリングを実施したわけである。 採用担当者も面接官もタイプは色々なので、あくまで「こいういう人もいる」という一例に過ぎないし、エントリーシートを紙で書いてた時代の話なので今とは違う面もある。当時私は就職1年目ぐらい、A子は4年目ぐらいとどちらも若かったので、今同じ話をすれば付
「文系の院生」は就活で不利? とある就活サイトの人から、リレーブログみたいなものへの参加を依頼されたので書きました。この記事は主に企業への就職の話ですが、面接対策の部分は公務員であれ何であれ同じようなことが言えると思います。 (もう一本、研究開発職の就活に関する記事も書いてあり、そっちでは人事部の裏話的なものを載せています。) ちょうど1年くらい前、「『頭のいい』女子はいらないのか——ある女子国立大院生の就活リアル」という記事(リンク)にはてなブックマークが400個ぐらい付いて話題になっていた。記事は「女だから」という理由で就活で苦労するという話なのだが、ツイッターのタイムラインではなぜか、「女だからというより、『文系の院生は使えない』からだろ。とくに社会学はダメだ!」みたいな話になっていて、以下のようなまとめまで出てきていた。 togetter.com 「文系の院卒」の就職率は相対的に悪
以前のエントリで、Pythonからのメールの送信を試しましたが、 www.statsbeginner.net この時は文中にも書いているとおり、差出人名を日本語表示するのがうまく出来ませんでした。 ところがその問題は、下記の方法で解決しました。 teratail.com 要するに、'差出人名 <アドレス>'という文字列を用意する時に、まるごとMIMEエンコードしてはダメで、「差出人名」のところだけがエンコードされるようにしなければならない。 それは前回のエントリ時点でも分かっていたんですが、なんか書き方が間違ってたようです。 どうやら、まず差出人名の文字列を.encode()メソッドでエンコードした上で、それをHeader()関数に与える際もHeader()関数の引数にエンコードを指定し、さらに、Headerオブジェクトそのものに.encode()メソッドを書き加えるということをしなければ
時系列データをあまり扱わないのでまじめに考えてなかったんですが、Rで単位根検定をする場合、拡張ディッキー=フラー検定(augmented Dickey–Fuller test)を実施してくれるadf.test()という関数があります。 しかしこの関数は、 考慮するラグの次数を指定しなかった場合、サンプルサイズ(時系列データの長さ)を基準にして自動選択している 定数項もトレンド項も含むパターンしかやってくれない という制限があり、後者についてはたいていの場合含めといたほうがいいらしいので問題ないとして、前者はよくわからない基準であって*1、本来はAICなどに基づいて選択されたラグ次数を用いたモデルで検定したほうがいいと思われます。実際ラグ次数によって結果がけっこう変わることもあるので、慎重に選んだほうがいいかと思います。 ということで、以下の記事で説明されているように、CADFtestパッケ
意外と簡単にできた メールを300人ぐらいに発信する必要がありまして、Toに全員入れるわけにはいかないし、BCCで送るのもダサいかなと思って、「1人1人を個別にToに指定して、同じ件名・同じ文面のメールを送る」ってのをPythonでやってみました。*1 標準モジュールのemailってのとsmtplibってのを使って、50行程度のコードで簡単に送れました。 1点心残りなのは、後述のとおりFromの欄に日本語の差出人名を表示させるやつが、色々調べたものの結局できませんでした。 用意するもの アドレスリストをCSVで用意して、本文はテキストファイルに書いておきました。 コード ネットでsmtplibを使ったPythonでのメール送信の解説を探すと、sendmail()というメソッドで送っているものと、send_message()というメソッドで送っているものがあります。sendmail()が基本
次のページ
このページを最初にブックマークしてみませんか?
『StatsBeginner: 初学者の統計学習ノート』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く