質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

6203閲覧

Scikit-learnにおける.DESCRが何者かについて教えてください。

beggier1

総合スコア7

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/12/02 10:57

機械学習の基礎を勉強しています。

以下コードにて
print(iris_datasets.DESCR)
を実行するとiris_datasetsの詳細が表示されます。
この.DESCRとは何者でしょうか。
PythonのメソッドなのかScikit-learnのメソッドなのか。
(何かしらのメソッドだとしても.DESCR()とならないのに不思議に思います。)

また、このようにプログラム勉強中に分からない箇所が出てきた場合の対応策も教えてください。
質問の前にGoogleにて「scikit learn .DESCR」や「python .DESCR」と検索致しましたが
.DESCRを使用したプログラム例は出てきても単体の説明が見つけられませんでした。

Python

1from sklearn import datasets 2 3iris_datasets = datasets.load_iris() 4 5print(iris_datasets.DESCR)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

このような問題の調べ方

python

1>>> dir(iris_datasets) 2['DESCR', 'data', 'feature_names', 'filename', 'frame', 'target', 'target_names'] 3>>> iris_datasets.DESCR.__class__ 4<class 'str'>

これを見ると、DESCRはiris_datasetsの属性であり、値がstrのインスタンスであることがわかります。

python

1>>> iris_datasets.__class__ 2<class 'sklearn.utils.Bunch'>

なので、iris_datasetsのクラスはsklearnモジュールのサブモジュールであるBunchというクラスであることがわかります。
Bunchの説明を見てみましょう。helpを使ってもよいのですが、見終わると消えてしまうのが嫌なので、私は以下のようにしてみています。

python

1>>> print(iris_datasets.__class__.__doc__) 2Container object exposing keys as attributes 3 4 Bunch objects are sometimes used as an output for functions and methods. 5 They extend dictionaries by enabling values to be accessed by key, 6 `bunch["value_key"]`, or by an attribute, `bunch.value_key`. 7 8 Examples 9 -------- 10 >>> b = Bunch(a=1, b=2) 11 >>> b['b'] 12 2 13 >>> b.b 14 2 15 >>> b.a = 3 16 >>> b['a'] 17 3 18 >>> b.c = 6 19 >>> b['c'] 20 6

ソースを見るために、sklearnがどこにあるかを調べてみましょう。

python

1>>> import sklearn 2>>> print(sklearn) 3<module 'sklearn' from 'C:\Users\user\anaconda3\lib\site-packages\sklearn\__init__.py'>

C:\Users\user\anaconda3\lib\site-packages\sklearn にあることがわかります。

Bunchについて調べたければ、
C:\Users\user\anaconda3\Lib\site-packages\sklearn\utils_init_.py を読みます。
63行目にBunchクラスの定義が見つかります。しかし、そこには、DESCRは出てきません。
これは、DESCRがBunchクラスのインスタンスとして必ずあるものとは限らないことを示しています。
このことから、DESCRはインスタンス作成時または作成後に設定された属性であることがわかります。
そこで作成している関数datasets.load_irisを調べます。
そのためには、
C:\Users\user\anaconda3\Lib\site-packages\sklearn\datasets_init_.py を読みます。
11行目に以下のように書かれています。

python

1from ._base import load_files 2from ._base import load_iris 3from ._base import load_linnerud

つまり、load_irisは以下のファイルにあります。
C:\Users\user\anaconda3\Lib\site-packages\sklearn\datasets_base.py

あとは、_base.pyの387行目から499行目を読んでください。

わからない点があったら、また聞いてください。

投稿2020/12/02 12:21

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beggier1

2020/12/02 13:08

素早く、詳細にお答え頂きありがとうございます!! .__class__や.__doc__等、特殊メソッド?の使い方やモジュールの元コードの読み方等今回初めて知り、大変勉強になりました! 以下追加で質問させてください。 よろしければご回答いただけると幸いです。 >>> import sklearn >>> print(sklearn) を行うと <module 'sklearn' from 'C:\Users\user\anaconda3\lib\site-packages\sklearn\__init__.py'> と出力されsklearnの在りかが出てくることは分かりました。 その後に目的のBunchクラスやDESCを見つけるために C:\Users\user\anaconda3\Lib\site-packages\sklearn\utils\init.py C:\Users\user\anaconda3\Lib\site-packages\sklearn\datasets\init.py こちらのファイルを読むと書いてありますが、どのようにしてこのファイルを探したのでしょうか。 ファイルがたくさんあり、他同様の問題に直面した際にどれを見ればいいか分からず、解決に至らなそうなので教えて頂けると大変うれしく思います。
beggier1

2020/12/02 13:56

今自身で行ってみて把握しました。 読み込みが足りておらず、既に回答されていることに対しても質問してしまい大変申し訳ありませんでした。 今後ともプログラム学習中に疑問点が生じた際には質問をさせて頂きたいと考えておりますので、その際にはまたお答えいただけるとありがたいです。 本日は詳細な説明ありがとうございました。
guest

0

scikit learn .DESCRで検索すると、上位の結果に以下がヒットするかと思います。

7.1. General dataset API

The datasets also contain a full description in their DESCR attribute and some contain feature_names and target_names.

とあるようにdatasetの属性(attribute)です。よって()は不要です。
型はprint(type(iris_datasets.DESCR))と実行すればわかるようにstrです。
そしてこの文字列は、datasetの説明文となっています。

投稿2020/12/02 11:44

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beggier1

2020/12/02 13:10

ご回答ありがとうございます! また疑問点が生じた場合にはお答えいただけると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問