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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Kaggle

Kaggleは、機械学習モデルを構築するコンペティションのプラットフォームおよびその運営企業を指します。企業や政府といった組織とデータサイエンティスト・機械学習エンジニアを繋げるプラットフォームであり、単純なマッチングではなくコンペティションが特徴です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

2回答

861閲覧

IF文の仕様について

humanbeing

総合スコア7

Kaggle

Kaggleは、機械学習モデルを構築するコンペティションのプラットフォームおよびその運営企業を指します。企業や政府といった組織とデータサイエンティスト・機械学習エンジニアを繋げるプラットフォームであり、単純なマッチングではなくコンペティションが特徴です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

1グッド

1クリップ

投稿2021/12/28 09:26

Kaggleで使用されているコードの中でわからないものがあったので質問いたします。

def plot_confusion_matrix(y_true, y_pred, classes, normalize=True, title=None, cmap=plt.cm.Blues): """ This function prints and plots the confusion matrix. Normalization can be applied by setting `normalize=True`. """ if not title: if normalize: title = 'Normalized confusion matrix' else: title = 'Confusion matrix, without normalization'

※定義文は途中で区切られたものです

これは混同行列を表示しプロットする目的があり、後に2値判定のモデルで青色の混同行列を表示するために使われています。

if文に関しての疑問です。

if notは条件式の結果が真であれば偽、偽の場合は真を返すのですよね。
しかし、if not title: のtitleの部分は条件式になっているようには見えないのですが、これはどのような意味を持つのでしょうか。

そして、if normalize:というのも条件式になっていないように見えます。そしてその条件の先に、
title = 'Normalized confusion matrix'、というのが存在するのも、どのような処理を行いたいのかよく理解できませんでした。

plot_confusion_matrix(y_test, y_pred, classes=["loyal", "churn"], title='Confusion matrix, with normalization', normalize=True)

実際にはこのように定義が利用されています。title = の部分で既に定義が行われているので、わざわざif文で定義しなおすように作るというのもよくわかりません。

初歩的な質問かもしれませんが、お答えいただけると幸いです。

よろしくお願いいたします。

kaggle: telecom-customer
https://www.kaggle.com/abhinav89/telecom-customer

コード全文
https://www.kaggle.com/aliasgherman/telecom-customer

wsb👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

python

1def function_name(arg = default): 2 ....

関数宣言でパラメータの部分を上のように書くと、引数としてargになにも渡されなかったときに、defaultargとして使用されます。(デフォルト引数と言ったりします)

たとえば、

python

1func example(arg1 = "ex"): 2 print(arg1) 3 4example()

これを実行すると "ex" と出力されます。


python

1if x:

if文は、式(上のx)を評価して、その結果の真偽値によって条件分岐をしますが、その基準がPythonのドキュメンテーションに書いてあります。

6.11. Boolean operations

要約すると、

FalseNone・数字の0・空のコンテナ(配列やセットなど)は、すべてfalseと解釈され、それ以外だとtrueとして解釈される

python

1if not title:

そんなわけで今回のこの部分は、titleNoneかどうかにより条件分岐するという文脈になります。


追記:

ちなみにif notはまとめて一つの構文というわけではありません。

notは論理演算子というものです。演算子は特殊な形をした関数とみなすことができ、notの場合は以下のような関数とみることができます。

python

1def not(rhs): 2 if rhs: 3 return False 4 else: 5 return True

これをふまえると以下のような書き方も自然に見える(?)かもしれません。

python

1a = not True # a = False 2b = (1 == 1) # b = True 3c = not None # c = True

投稿2021/12/28 13:21

編集2021/12/31 16:53
wsb

総合スコア194

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

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

humanbeing

2021/12/31 17:26

wsbさん、ありがとうございます。 なるほど、関数を利用するとき、引数を何も設定していなくてもデフォルトで設定した値(デフォルト引数)が使われるようになるんですね。知りませんでした。 if文ではfalse や None、0などもfalseと解釈されるというのも知りませんでした。ありがとうございます。 notの捉え方は「なるほど」という感じです。論理演算子に関する理解が足りていませんでした。 こういった基本的な部分もやってはいますが、簡単な把握しかしていないので構文など網羅的にやった方がいいのかな...と思い始めています。どのように思いますでしょうか。 回答ありがとうございました!
humanbeing

2022/01/07 11:11

返信遅れて申し訳ありません。ありがとうございます。 なるほど、併用して行うという考え方もあるのですね。専門的なことを英語で学ぶのは少しハードルが高そうですが、挑戦してみます。 ありがとうございました!
guest

0

Python

1def plot_confusion_matrix(y_true, y_pred, classes, 2 normalize=True, 3 title=None, 4 cmap=plt.cm.Blues):

とありますのでこの関数を呼び出す引数として title があり、 title 引数に値があればそれがそれが用いられますがデフォルトは None 値。
ただtitleをNoneのままではなく値を設定したいので、下の

Python

1 if not title: 2 if normalize: 3 title = 'Normalized confusion matrix' 4 else: 5 title = 'Confusion matrix, without normalization'

にて title が値なしであれば「偽」なので if not title でTrueになりブロックないが実行される。

かつ normalize のTrue/Falseに応じて title に値を代入

ということですね。

title = の部分で既に定義が行われているので、わざわざif文で定義しなおすように作るというのもよくわかりません。

そこはデフォルト値を示すだけで定義されていません。関数呼び出しの時に値があればそのまま使い、なければデフォルトとして None つまり値なしとなるということです。

if notは条件式の結果が真であれば偽、偽の場合は真を返すのですよね。

その通りですが 変数の値が 値なし の場合も 偽 を返しますね。

投稿2021/12/28 10:30

編集2021/12/29 11:51
aokikenichi

総合スコア2240

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

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

ppaul

2021/12/28 11:36

値がNoneであるのと未定義であることは同じではありません。
humanbeing

2021/12/31 18:06

aokikenichiさん、回答ありがとうございます。 「title が値なしであれば「偽」なので if not title でTrueになりブロックないが実行される」というのが答えの確信ですね。ありがとうございます。 normalize のTrue/Falseに応じて title に値を代入という処理だったのですね。納得しました。 二つの疑問に対し的確なアドバイス、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問