パンダ/ Statsmodel / Scikit-learn


41
  1. パンダ、Statsmodels、およびScikitは、機械学習/統計操作の異なる実装を学習していますか、またはこれらは相互に補完的ですか?

  2. どれが最も包括的な機能を備えていますか?

  3. 積極的に開発および/またはサポートされているのはどれですか?

  4. ロジスティック回帰を実装する必要があります。これらのどれを使用すべきかについての提案はありますか?

回答:


33
  1. Scikit-learn(sklearn)は、リストされている3つのうち、機械学習に最適です。PandasとStatsmodelsには予測学習アルゴリズムが含まれていますが、それらはまだ生産準備が整っていない/隠されています。多くの場合、著者はさまざまなプロジェクトに取り組むため、図書館は無料です。たとえば、最近、PandasのデータフレームがStatsmodelsに統合されました。sklearnとPandasの関係は存在しません(まだ)。

  2. 機能を定義します。それらはすべて実行されます。最も有用なものを意味する場合は、アプリケーションによって異なります。Python(データフレーム)にすばらしい新しいデータ構造が追加されたため、ここでPandasに間違いなく+1を付けます。パンダもおそらく最高のAPIを持っています。

  3. それらはすべて積極的にサポートされていますが、パンダには最高のコードベースがあります。SklearnとPandasはStatsmodelsよりもアクティブです。

  4. 明確な選択はスクレーンです。実行方法は簡単で明確です。

    from sklearn.linear_models import LogisticRegression as LR
    logr = LR()
    logr.fit( X, Y )
    results = logr.predict( test_data)
    

5
以下の長い説明を必ずお読みください!
ダートドッグ

4
この回答では、Pandasは主にデータ操作(インデックス作成、選択、集計など)に使用され、他の2つはモデルの構築(予測や推論など)に使用されることを説明していません。
ネイサングールド

私は1年以上sklearnを使用してきましたが、プロジェクトが成長した今、Pandasの優れたデータ構造を使用する必要性を感じているので、長期的には補完的なものになると思います。
dashesy

これは最近変更された可能性がありますが、importステートメントでは、linear_model(単数形)であり、ではありませんlinear_models
ヴィシャル

75

受け入れられた回答を少し限定して明確にしたいと思います。

3つのパッケージは、異なる分野をカバーし、異なる主な目的を持ち、機械学習/統計の異なる分野を強調するため、互いに補完的です。

  • パンダは主に、データを直接処理して操作するためのパッケージです。
  • scikit-learnは、大規模でスパースなデータが多い予測モデリングに重点を置いて機械学習を行っています
  • statsmodelsは、「従来の」統計と計量経済学を行っており、パラメータ推定と(統計)テストにずっと重点を置いています。

statsmodelsには依存関係としてパンダがあり、パンダは統計情報にオプションでstatsmodelsを使用します。statsmodelsはpatsy、Rと同様のモデルへの類似した数式インターフェイスを提供するために使用しています。

scikit-learnとstatsmodelsの間のモデルにはいくつかの重複がありますが、目的は異なります。たとえば、2つの文化:統計と機械学習をご覧ください

統計モデルについてもう少し

statsmodelsは、3つの開発アクティビティが最も低く、リリースサイクルが最も長くなっています。statsmodelsには多くの貢献者がいますが、残念ながらまだ2人の「メンテナー」のみです(私はそのうちの1人です)。

statsmodelsの中核は「生産準備完了」です。線形モデル、堅牢な線形モデル、一般化線形モデル、離散モデルは数年前から存在し、StataとRに対して検証されています。statsmodelsには、AR、ARMA、 VAR(ベクトル自己回帰)回帰。他のPythonパッケージでは使用できません。

scikit-learnの機械学習アプローチとstatsmodelsの統計および計量経済学アプローチとの特定の違いを示すいくつかの例:

単純な線形回帰、OLSには、パラメーターのテスト、外れ値の測定、仕様のテストを含むhttp://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.OLSResults.htmlの多数の推定後分析があり ます。 /statsmodels.sourceforge.net/devel/stats.html#residual-diagnostics-and-specification-tests

Logistic Regressionは、statsmodels Logitで離散モデルまたは一般化線形モデルのファミリーとして実行できます(GLM)。http://statsmodels.sourceforge.net/devel/glm.html#module-reference

GLMには通常のファミリが含まれ、離散モデルにはLogitさらにProbit、多項および回帰回帰も含まれます。

ロジット

使用方法Logitはこれと同じくらい簡単です http://statsmodels.sourceforge.net/devel/examples/generated/example_discrete.html

>>> import statsmodels.api as sm
>>> x = sm.add_constant(data.exog, prepend=False)
>>> y = data.endog

>>> res1 = sm.Logit(y, x).fit()
Optimization terminated successfully.
         Current function value: 0.402801
         Iterations 7
>>> print res1.summary()
                           Logit Regression Results                           
==============================================================================
Dep. Variable:                      y   No. Observations:                   32
Model:                          Logit   Df Residuals:                       28
Method:                           MLE   Df Model:                            3
Date:                Sat, 26 Jan 2013   Pseudo R-squ.:                  0.3740
Time:                        07:34:59   Log-Likelihood:                -12.890
converged:                       True   LL-Null:                       -20.592
                                        LLR p-value:                  0.001502
==============================================================================
                 coef    std err          z      P>|z|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
x1             2.8261      1.263      2.238      0.025         0.351     5.301
x2             0.0952      0.142      0.672      0.501        -0.182     0.373
x3             2.3787      1.065      2.234      0.025         0.292     4.465
const        -13.0213      4.931     -2.641      0.008       -22.687    -3.356
==============================================================================
>>> dir(res1)
...
>>> res1.predict(x.mean(0))
0.25282026208742708
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.