質問: LinearRegression().fit(X_train, y_train) print(f"training dataに対しての精度: {lr.score(X_train, y_train):.2}") print(f"test dataに対しての精度: {lr.score(X_test, y_test):.2}") ``` 上記を実行したところ、以下のような出力が得られました。 ``` Wall time: 86.7 ms training dataに対しての精度: 0.95 test dataに対しての精度: 0.61 ``` ここで`lr`というインスタンスに対して`score`というメソッドを用いて精度を求めましたが、ここでのスコアの値は決定係数的であることは分かるのですが、正確には何であるかがわかりません。 https://github.com/scikit-learn/scikit-learn/blob/7b136e9/sklearn/linear_model/base.py#L362 に詳しいことが書かれているということは分かるのですが、難しくて諦めてしまいました。 詳しい方がいれば教えて頂けると恐縮です。 また、スクリプト上のどこにか書かれてあるか教えて頂けるとなおのこと嬉しいです。 また、`X_train`を説明変数として学習をしているのですが、このモデルを作ると時どのようなアルゴリズムで動いているのでしょうか?(一般逆行列を解いて導出しているなどなど) こちらに関しても分かる方がいれば教えて頂けると恐縮です。 (スクリプトの場所まで教えて頂ければなお嬉しいです。)
回答: ドキュメントを見ましょう。 > > he coefficient R^2 is defined as `(1 - u/v)`, where u is the residual sum of squares `((y_true - y_pred) ** 2).sum()` and v is the total sum of squares `((y_true - y_true.mean()) ** 2).sum()`. > > > https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html#sklearn.linear_model.LinearRegression.score > > > wikipediaで一般的とされている決定係数と同じものです。 https://ja.wikipedia.org/wiki/%E6%B1%BA%E5%AE%9A%E4%BF%82%E6%95%B0 > > どのようなアルゴリズムで動いているのでしょうか? > > > 実装としては(いろいろあるけど)基本的にはscipyの`linalg.lstsq`に丸投げされると思います(疎行列型でない場合)。 https://github.com/scikit-learn/scikit-learn/blob/7b136e9/sklearn/linear_model/base.py#L485 そしてscipyはLAPACKに投げています。 https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.lstsq.html デフォルトの動作の説明はこれだと思いますが、あまり自信がないし私自身理解できていないので、参考程度に。 https://www.nag.co.uk/numeric/FL/nagdoc_fl26/pdf/f08/f08kcf.pdf