静かなる名辞

pythonとプログラミングのこと



機械学習

【python】sklearnのRFE(Recursive Feature Elimination)を使ってみる

はじめに RFE(Recursive Feature Elimination)というものがあることを知ったので試してみたいと思いました。 RFEは特徴選択の手法で、その名の通り再帰的にモデルを再構築しながら特徴を選択するという特色があります。sklearn.feature_selection.RFE — scik…

決定木回帰、ランダムフォレスト回帰、SVRを可視化してみた

はじめに 最近回帰モデルで遊んでいるのですが、決定木系の回帰に好印象が持てなくなりました。 だって、決定木ってオーバーフィット番長ですよ? 回帰とは名ばかりのカクカクの回帰曲線が出てくることは目に見えています。 「そんなあなたのためにランダム…

【python】sklearnのRidgeとLassoを使ってみる

はじめに Rdige、Lassoといえば割と定番の正則化アルゴリズムです。 特にLassoはスパースな解を得てくれるという触れ込みです。なんだかカッコいいので、昔から触ってみたいと思っていました。 実験 このような関数fを考えます。 def f(x): return -3*x + 5*…

【python】線形な分類器の比較

はじめに 線形な分類器は癒やし やれ、RBFカーネルだ、決定木だ、ニューラルネットだ、深層学習だ、と流行り物に乗っかって、言うことを聞かない非線形な分類器をなんとかねじ伏せている綿牛たちは、きっと心が荒んでいるのでしょう。 そんな私たちに、線形…

【python】ランダムフォレストのOOBエラーが役に立つか確認

はじめに RandomForestではOOBエラー(Out-of-bag error、OOB estimate、OOB誤り率)を見ることができます。交差検証と同様に汎化性能を見れます。 原理の説明とかは他に譲るのですが、これはちゃんと交差検証のように使えるのでしょうか? もちろん原理的に…

【python】GridSearchCV『の』パラメータ・チューニング

はじめに 機械学習でパラメータ・チューニングをしたい場合、グリッドサーチを行うのが定石とされています。sklearnではグリッドサーチはGridSearchCVで行うことができます。sklearn.model_selection.GridSearchCV — scikit-learn 0.20.0 documentation それ…

【python】sklearnのVarianceThresholdを試してみる

はじめに VarianceThresholdは名前の通り、分散がしきい値以下の特徴量を捨てます。sklearn.feature_selection.VarianceThreshold — scikit-learn 0.20.0 documentation これといってすごいところはありませんが、気楽に使えそうなので試してみました。 目次…

【python】sklearnのclass_weightの挙動

はじめに 先に断っておくと、class_weightの挙動はモデルによって異なる可能性が十分ある。今回はsklearn.svm.SVCとsklearn.ensemble.RandomForestClassifierのドキュメントを参照して、一応基本的に共通する部分を抜き出した。class_weightを調整する必要が…

【python】sklearnで「何もしない」モデルがほしい

sklearnで「何もしない」モデルがあると、チョー便利。個人的にはそう思う。 どうやって使うかというと、具体的には以前の記事で書いたFeatureUnionと組み合わせて使う。 参考(以前の記事):【python】複数の特徴をまとめるFeatureUnion - 静かなる名辞 た…

【python】複数の特徴をまとめるFeatureUnion

単一の入力データから、複数の処理方法で幾つもの異なる特徴量が得られる・・・というシチュエーションがある。 この場合、「どれが最善か」という観点でどれか一つを選ぶこともできるけど、そうすると他の特徴量の情報は捨ててしまうことになる。総合的な性…

複数の目的変数で回帰を行う方法

はじめに 回帰分析を行う際、複数の目的変数に対して回帰をしたい場合があります。普通のモデルではできないのでちょっと面食らいますが、やり方は色々あるようです。 目次 はじめに 目的変数の数だけ回帰モデルを作る方法 複数の目的変数に対応したモデルを…

【python】SOMのライブラリSomocluはかなりおすすめ

SOM(Self-organizing maps:自己組織化写像)は割と古い、データの可視化手法(それ以外にも使えるが・・・)です。今回はpythonのSOMライブラリSomocluを使ってみたら、けっこう良かったというネタです。 目次 SOMの概要 ライブラリがない それでも頑張って…

cross_val_scoreはもうやめよう!一発で交差検証するにはcross_validateを使う

sklearnで交差検証をしてスコアを評価する方法としては、cross_val_scoreがよく推奨されているような気がします。実際、cross_val_scoreで検索すると日本語の記事がたくさん引っかかります。 しかし、cross_val_scoreは複数の評価指標を算出することができず…

【python】SelectKBestのscore_funcによる速度差を比較

SelectKBestはsklearnの簡単に特徴選択ができるクラスです。ざっくりと特徴選択したいときに、とても便利です。sklearn.feature_selection.SelectKBest — scikit-learn 0.19.1 documentation ところで、このSelectKBestにはscore_funcというパラメータを指定…

【python】numpyでデータをランダムサンプリング

機械学習に使うデータをランダムサンプリングしたいときがある。簡単そうなのにやり方が見つからないから自分で書く。 実装方針 重複ありランダムサンプリング 重複なしランダムサンプリング 実装と結果 そもそもなにに使いたかったの? 裏技 ※追記(参照す…

【python】sklearnのPCAでsvd_solverによる速度差を比較

sklearnのPCA(主成分分析)がやたら遅くて腹が立ちました。計算コストを下げるために次元削減してるのに、次元削減で計算コスト食ったら意味がありません。 とにかくこのPCAを高速化したかったので、svd_solverを変えてどうなるか試しました。なお、腹が立…

ランダムフォレストとSVMの使い分け

ランダムフォレスト(RandomForest)とSVM(Support Vector Machine)はよく比較される分類器です。でも、様々なシチュエーションで、けっきょくどちらを使うべきなのか、という指針はあまり見かけません。 私は研究などで*1両者を使ってきて、それなりに両者…

【python】分類タスクの評価指標の解説とsklearnでの計算方法

混同行列、適合率、再現率、F1値の基本と多クラス分類のマクロ平均・マイクロ平均の理論、それらのsklearnでの計算について解説

sklearnのclassification_reportで多クラス分類の結果を簡単に見る

多クラス分類をしていると、「どのクラスが上手く分類できてて、どのクラスが上手く行ってないんだろう」と気になることがままあります。 そういった情報を簡単に要約して出力してくれるのがsklearnのclassification_reportで、簡単に使える割に便利なので実…

【python】RandomForestの木の本数を増やすとどうなるか?

RandomForest(ランダムフォレスト)には木の本数という重要なパラメータがある。slearnのデフォルトは10だが、実際に使うときは1000以上にしてやらないと良い性能が得られないということをよく経験する。 これを大きくすることで、一体どんな効果が得られる…

【python】sklearnのPipelineを使うとできること

機械学習では、何段もの前処理をしてから最終的な分類や回帰のアルゴリズムに入力するということがよくあります。前処理にはけっこう泥臭い処理も多く、leakageの問題なども絡んできます。はっきり言って自分で書こうとすると面倒くさいです。 こういう問題…

【python】sklearnのfetch_20newsgroupsで文書分類を試す(3)

前回はとりあえずベースラインの分類を行い、F1値にして0.7くらいの性能を得た。 ここで自然言語処理的なアプローチで手法の改良に進むのもありだと思うが、とりあえずmin_dfをパラメタチューニングしてみるか、という方向に傾いている。前回は恣意的に決め…

【python】sklearnのfetch_20newsgroupsで文書分類を試す(2)

前回の続きをやっていく。とりあえず今回は簡単な方法で分類してみて、ベースラインを作ることにする。 特徴を捨てる 分類する まとめ 次回 何はともあれ、文書から特徴抽出してベクトル化しないと話にならない。ベースラインなのでBag of Wordsを使うことに…

【python】スタッキング(stacking)分類器を実装して理解する

最終更新:2018-04-02 はじめに スタッキング(stacking)といえば、複数の分類器を組み合わせて強い分類器を作る系の手法である。単なるvotingやsoft votingより強い。 誤解を恐れずにざっくり言ってしまうと、分類器の出力(複数)と真の出力の関係を機械…

【python】sklearnのVotingClassifierを試す

複数の分類器に分類を行わせ、その結果を平均した結果を得ればより正しい結果が得られるだろう・・・ということらしい。sklearn.ensemble.VotingClassifier — scikit-learn 0.19.1 documentation 先に結論を書いておくと、何種類かの分類器を入れてsklearnの…

【python】ランダムフォレストの特徴重要度で特徴選択を試す

最終更新:2018-04-02 はじめに RandomForestでは特徴重要度を計算できる、というのは結構有名な話です。では、これはどの程度実用的なのでしょうか? pythonのsklearnを使い、簡単に実験して確かめてみました。 目次 はじめに 実験条件 実験 実装 気を配っ…

【python】numpyで最小二乗法を実装(線形、多項式、正則化など)

最小二乗法をnumpyで実装してみた。 理論背景についてはこちらを参照。 mathtrain.jp PRMLの線形回帰モデル(線形基底関数モデル) from Yasunori Ozaki www.slideshare.net qiita.com やるべきこと 最小二乗法(正確には線形基底関数モデルによる回帰)は目…

【python】pca、mds、nmds、tsneとmatplotlibでデータの可視化をしてみる

タイトルの通りのことをする。データセットはirisとdigitsを使ってみる。 ソースコード。 # coding: UTF-8 from sklearn.datasets import load_digits, load_iris from sklearn.manifold import MDS, TSNE from sklearn.decomposition import PCA from matpl…

【python】pythonでn-gramの特徴量を作る

○○ってパッケージでできるよ! という意見もあると思いますが、ちょっと挙動を変えたくなる度にパッケージのhelp読んだり、微妙に柔軟性のないパッケージに苦しむ(たとえば文末の句点と次の文の最初の文字は繋げないで欲しいのにできない、とか)くらいなら…

【python】sklearnの次元削減クラスSelectPercentileとSelectKBestについて

ネットの巷には「sklearnで次元削減するのでとりあえずPCA使ってみました」という記事が溢れかえっているのだが、PCAは基本的に線形な世界でしか動かないので、扱うデータによっては「PCAかけてから分類器に入れたら精度がガタっと落ちました」みたいなこと…