第3回 Python 3 データ分析 模擬試験 第3回 Python 3 データ分析 模擬試験 へようこそ。 以下の各項目を入力後、「次へ」をクリックして模擬試験を開始してください。 ※あらかじめ利用規約をご確認ください(プライム・ストラテジーから採用やイベントの情報など届くことがあります)。 ※結果の詳細は入力いただいたメールアドレス宛てにのみお送りします。必ず確認可能なメールアドレスを入力してください。 お名前 メールアドレス(結果の詳細をお送りします) 利用規約に同意する。 1. データ分析に関する次の記述のうち、誤っているものはどれか。 データ分析エンジニアは、情報工学を基盤としてデータベース技術からデータの活用まで幅広くデータと向き合う学術分野、つまりデータ工学を実践する一つの職種として位置づけることができる。 データサイエンティストの役割は、研究分野と実務で多少の違いがある。研究分野においては、新たな解法や新技術への取り組みが重視され、実務においては、解決したい課題に向き合う部分が重視される。 データ分析に利用されるサードパーティ製パッケージの一つにSciPyがある。これは科学技術計算をサポートするものであり、scikit-learnの内部で高度な計算処理に多用されている。 サードパーティ製パッケージであるpandasが提供するDataFrame構造は、C言語のデータフレームからインスパイアされたものであり、表形式の2次元データを柔軟に取り扱えるという特徴がある。 データ分析を行う上でデータハンドリングは重要な役割を持つ。データハンドリングは前処理ともいわれ、データの入手や再加工、つなぎ合わせや可視化など、データ分析を行う上で何度も実行されるものである。 2. 機械学習に関する次の記述のうち、正しいものはどれか。 教師あり学習は、正解となるラベルデータが存在する場合に用いられる方式であり、そのラベルを説明変数といい、説明変数以外のデータは目的変数という。目的変数は特徴データや特徴量などとも呼ばれる。 教師あり学習は、目的変数の種類により回帰と分類の2種類に分けられる。回帰は目的変数がカテゴライズされた、連続値ではないデータとなる。 教師あり分類の場合の機械学習の処理手順は、データ入手の後に精度評価、そしてデータ加工・可視化、アルゴリズム選択、学習プロセスへと進むのが一般的である。 教師なし学習は、正解ラベルを用いない学習方法であり、クラスタリングや次元削減といったタスクを行う。典型的なものに強化学習がある。 機械学習を用いずにカテゴライズや数値予測を行う手法の一つとして、ルールベースがある。ルールベースではプログラミングの条件分岐の要領でデータを容易にルール化できるが、パラメータの数が増えると記述が困難になる。 3. PythonおよびPythonの実行環境に関する次の記述のうち、正しいものはどれか。 venvはPythonの仮想環境をWindowsやmacOS、Linuxで作成する仕組みである。仮想環境が有効になるとコマンドプロンプトに環境名が表示される。仮想環境を無効化する(抜ける)には、quitコマンドを実行する。 venvで作成したPythonの仮想環境は、異なるバージョンのPython言語を使い分けるのに便利である。 pipコマンドは、The Python Package Index に公開されているPythonパッケージのインストールなどを行うユーティリティである。パッケージをインストールするにはpip installコマンドを、アンインストールするにはpip install -Uコマンドを使用する。 pip listコマンドはその仮想環境にインストールされているパッケージの一覧を表示する。pip freezeも同様の働きをするが両者は出力形式が異なり、pip listはpip install向けの形式で出力する。 Anacondaで設定した環境下でパッケージ管理をする場合には、Anaconda独自のcondaコマンドのほかpipも利用可能である。ただし稀にcondaコマンドで構築された環境がpipの利用で壊されてしまうこともあるため、Anacondaを利用する場合は基本的にcondaコマンドでパッケージ管理することが望ましい。 4. 次のような実行結果を得たい場合、コードの【A】【B】【C】の組み合わせとして正しいものはどれか。>>> str = 'Hello Python'>>> str.【A】'hello python'>>> str.【B】'Hi Python'>>> str.【C】['Hello', 'Python'] 【A】title() 【B】replace('Hi', 'Hello') 【C】split() 【A】title() 【B】replace('Hi', 'Hello') 【C】strip() 【A】lower() 【B】replace('Hello', 'Hi') 【C】split() 【A】lower() 【B】replace('Hi', 'Hello') 【C】split() 【A】lower() 【B】replace('Hello', 'Hi') 【C】strip() 5. 次の正規表現を用いたスクリプトの[ ア ]の部分に入れたときエラーとなるものはどれか。import reprog = re.compile('(K|S)us(a|u)n(a|o)m?g?i(saya|ro)?', re.IGNORECASE)[ ア ]print(ret[0]) ret = prog.search('KUSANAGI') ret = prog.search('Kusanagi saya') ret = prog.search('SUSANOO') ret = prog.search('KUSANOMI') ret = prog.search('Kusanoiro') 6. 次のようなコードを実行した場合に出力されるログレベルとして正しいものはどれか。[ コード ]import logginglogging.basicConfig(format='%(levelname)s')logging.debug('デバッグレベル')logging.info('INFOレベル')logging.warning('警告レベル')logging.error('エラーレベル')logging.critical('重大なエラー') DEBUG INFO WARNING ERROR CRITICAL DEBUG INFO WARNING ERROR DEBUG INFO WARNING INFO WARNING ERROR WARNING ERROR CRITICAL 7. Jupyter Notebookに関する次の記述のうち正しいものはどれか。 Notebookファイルは保存することができ、その拡張子は「.json」である。 NotebookファイルはYAML形式で記述されており、プログラムや結果を参照するためには基本的にはJupyter Notebookを実行する必要があるが、yumなどのリポジトリサービスはNotebookファイルの表示に対応しているため、これらを利用して参照することができる。 マジックコマンドは、「!」または「!!」からはじまる特別なコマンドで、たとえば、プログラムの実行時間を複数回試行して計測を行うものもある。 Jupyter Notebookではセル単位で処理を実行できるため、変数の内容が意図しないものとなることがある。そこで変数の後ろに「%」をつけて実行することで当該セルでの変数の値を確認できる。 Jupyter Notebookがデータ分析や機械学習の分野でよく使われる理由として、1つのNotebookというドキュメントにPythonなどのプログラムとその結果やMarkdown記法のドキュメントなどをまとめられることのほか、コードの実行結果の表示は、通常の文字列に加え、表やグラフも可能であることなどが挙げられる。 8. 数学の基礎に関する次の記述のうち誤っているものはどれか。 cosh(ハイパボリックコサイン)のグラフの形は、「懸垂線」「カテナリー曲線」と呼ばれ、ロープの両端を持った時に見られる曲線の形を表現している。 シグモイド関数のグラフの形は、座標点(0, 0.5)を基点として点対象の、S字型曲線である。 数式で「すべてを掛け合わせる」という処理を表す際には、ギリシャ文字のシグマの大文字を用いる。 ネイピア数とは数学定数の一つで、自然対数の底であり、通常「e」の記号で表現される。対数関数で底が省略された場合には、「e」なのか「10」なのかは注意が必要である。 三角関数では、角度の大きさを表す単位として度数法のほかに弧度法が使われる。 9. 座標平面上の2点であるA (5, 7)とB (2,3)の、2点間のマンハッタン距離として正しいものはどれか。 2 3 5 7 9 10. 行列に関する次の記述のうち正しいものはどれか。 行列の分解の理論「m×sの行列にs×nの行列を賭けると、m×nの行列になる」を逆に考えると、データ分析や機械学習において、説明変数の次元数を削減することができる。 行と列のサイズが同じ行列を特に正方行列と呼ぶ。正方行列のうち、対角成分がすべて0で、残りの要素が1の行列を単位行列と呼ぶ。 行列同士の掛け算は行列となる。数値の掛け算は順番を入れ替えても同じ結果となるが、行列の掛け算は順番を入れ替えると同じ結果になることはない。 行列の足し算と引き算は、2つの行列の行数と列数が合っていなくても計算は可能である。 行列の行の数とベクトルのサイズが同じ場合は、これらの掛け算を定義することができ、結果は、元の行列の列数と同じサイズのベクトルになる。 11. 微分積分に関する以下の記述のうち誤っているものはどれか。 f(x) = e^x(eのx乗)は微分してもe^xとなり形が変わらない。これは底がeのときだけ成り立つものであり、ネイピア数を底とする指数関数が解析学で重要な役割を果たす理由の一つである。 右辺が4x^2(4掛けるxの2乗)で表現される関数 f(x)を微分すると、右辺は8xとなる。 右辺が6x^2(6掛けるxの2乗)で表現される関数 f(x)を積分すると、右辺は3x^3+C(Cは積分定数)となる。 関数 F(x)を微分して f(x)となったとき、F を f の原始関数、f を F の導関数と呼ぶ。導関数に具体的なxの値を代入して得られる値は微分係数と呼ばれる。 微分は傾き、積分は面積と捉えることができる。データ分析や機械学習において、関数の傾きが0となる点は有益な情報として利用される。 12. 確率と統計に関する次の記述のうち、誤っているものはどれか。 分散は、すべてのデータの平均値からの差分を二乗して合計しデータの個数で割った値である。 条件付き確率は、何かしらの情報を得た時に、未来を予測する確率が変化する様子を表現しているものであると考えられる。これはベイズの定理の基本であり、データ解析手法を支える一つの柱となっている。 6面体のサイコロを1回振った場合の期待値は3.5である。 中央値とは、データを小さい順に並べてちょうど真ん中に来る値である。データの個数が偶数の場合には、ちょうど真ん中にくるデータがないため、中央値は存在しないことになる。 確率変数を引数にとって値を返す関数のうち、確率変数が離散的な場合を確率質量関数、確率変数が連続的な場合を確率密度関数という。標準正規分布などの確率分布は確率密度関数から得ることができる。 13. 「ネイピア数、cos(60°)、1の対数、円周率、4の階乗」の5つの数からなるデータがある。このデータについて正しいものはどれか。 最頻値は1である 算術平均は中央値より大きい 中央値は円周率より大きい cos(60°)は中央値より大きい 1の対数はcos(60°)より大きい 14. NumPyに関する次の記述のうち、誤っているものはどれか。 NumPyは配列や行列を効率よく扱うためのPythonのサードパーティ製パッケージで、配列用の型であるndarrayと行列用の型であるmatrixがある。 NumPy配列の形状を確認するにはshapeメソッドを、配列の形状を変形するにはreshapeメソッドを用いることができる。 NumPy配列の要素のデータ型を確認するにはdtype属性を、NumPy配列の要素のデータ型を変換するにはastypeメソッドを用いることができる。 2次元のNumPy配列を1次元に変換するにはravelメソッドまたはflattenメソッドを用いることができる。ravelメソッドは参照を返し、flattenメソッドはコピーを返す。 NumpyではPython標準のリストと同様、要素を取り出すためにスライスを使うことができる。Python標準のリストではスライスした結果は参照が返され、Numpyではスライスの結果はコピーが返される。 15. 次のスクリプトを実行した結果として正しいものはどれか。 import numpy as npa = np.array([7,8,9])b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])print(a.shape, b[0:1, [1,2]]) (3,) [[2 3], [4 5]] [1,3] [[2 3], [4 5]] (3,) [[2 3]] [3] [[2 3]] (1, 3) [[2 3]] 16. 次のスクリプトを実行した結果として正しいものはどれか。 import numpy as npa = np.arange(1, 10, 3)b = np.eye(20)print(a[-1], b[15, 15]) 7 1.0 10 1.0 7 3.0 9 1.0 10 0.0 17. 次のスクリプトを実行した結果として正しいものはどれか。 import numpy as npa = np.full((2, 3), np.pi).T.ravel()b = np.linspace(0, 1.25, 6)c = np.concatenate([a, b], axis=0)print(a[1], c[-2]) 3.141592653589793 1.0 3.141592653589793 1.25 3.141592653589793 0.75 2.718281828459045 1.0 2.718281828459045 0.75 18. 次のスクリプトを実行した結果として正しいものはどれか。 import numpy as npa = np.array([0, 8, 98, 998])a = a + 2a = a * 100b = np.log10(a)print(a[1], b[1]) 200 2.3010299956639813 100 1.0 1000 2.0 1000 3.0 10000 4.0 19. 次のスクリプトを実行した結果として正しいものはどれか。 import numpy as npa = np.array([2, 4])b = np.array([-1, 3])c = np.array([[1, 2], [2, 3]])d = a @ be = np.dot(c, a)print(d, e) 10 [5 7] 10 [10 16] 11 [10 16] 11 [10, 13] [-6, 18] [18, 30] 20. 次のスクリプトを実行して20を出力させたい。[ア]に入るものの説明として正しいものはどれか。import pandas as pddf = pd.DataFrame([[15, "a", True],[20, "b", False],[10, "c", False]])df.index = ["01", "02", "03"]df.columns = ["A", "B", "C"][ア]print(a) a = df.loc["A" , "01"] または a = df.iloc[1, 1] a = df.loc["02", "A"] または a = df.iloc[1, 0] a = df.loc["A", "02"] または a = df.iloc[1, 1] a = df.iloc["01", "A"] または a = df.loc[1, 1] a = df.iloc["A", "01"] または a = df.loc[1, 0] 21. pandasに関する次の記述のうち正しいものはどれか。 pandasはNumPyを基盤に2次元のDataFrameと、より多次元のSeriesをデータ型として提供している。 辞書形式でDataFrameを作る場合にはカラム名だけを指定すればよく、インデックス名は1から連番で自動的に割り当てられる。 read_htmlメソッドを使うと、WebサイトのHTML内のtable要素をDataFrameに取り込むことができる。read_htmlの結果はDataFrameのリストになっており、table要素が複数ある場合もインデックス番号を指定することで目的のテーブルを取得できる。 pickleモジュールはPythonのオブジェクトをシリアライズし、ファイルへの読み込みと書き込みを行うことができる。読み込みにはread_pickleメソッド、書き込みにはwrite_pickleメソッドを用いることができる。 抽出条件をつけずDataFrameのすべてを、たとえば「df.loc[:, :]」として出力した場合には、参照ではなくコピーが返される。 22. 次のスクリプトを実行した結果として正しいものはどれか。 import pandas as pddf = pd.DataFrame([[50, "a", False],[25, "b", True],[35, "c", True]])df.index = ["01", "02", "03"]df.columns = ["A", "B", "C"]def judge(arg):if arg <= 50:return "low"elif arg < 70:return "middle"else:return "high"df.iloc[:, 2] = df.loc[:, "A"] * 2df.iloc[:, 1] = df.loc[:, "C"].apply(judge)_ = df["C"] < 80df = df[_]print(df)print(df.iloc[1, 2], df.iloc[-1, 1]) 25 low 50 low 50 high 35 high 70 high 23. 次のスクリプトに関する説明のうち誤っているものはどれか。 import numpy as npimport pandas as pdnp.random.seed(123)dates = pd.date_range(start="2020-01-01", periods=31)df = pd.DataFrame(np.random.randint(1, 10, 31), index=dates, columns=["rand"])print(df)df_year = pd.DataFrame(df.groupby(pd.Grouper(freq='W-MON')).sum(), columns=["rand"] )print(df_year) 3行目は、乱数の発生に特定のシード値を与え、スクリプトの実行結果の再現性を確保する処理である。 4行目は、2020年1月1日から31日分の日付の配列を生成する処理である。periods=31 を end="2020-01-31" としても同じ結果となる。 5行目は、日付をインデックスとするDataFrameを作成している。dfを出力するとrand列の各値は、1から9までのランダムな整数となる。 5行目のrandintの第三引数を31以外の値に変更するとエラーになる。 6行目は月曜日の日付をインデックスとするDataFrameを生成する処理である。df_yearを出力すると、rand列の各値は月曜日から日曜日までのrand列の値を合計したものとなる。 24. DataFrameの欠損値の処理に関する次の記述のうち、誤っているものはどれか。 DataFrameの各要素が欠損値かどうかを確かめるメソッドは、isnullである。 欠損値が存在する行を削除するメソッドは、dropである。 fillnaメソッドの引数にmethod='bfill'を与えると、欠損値を1つ後方の値で補完する。 median()メソッドの結果をfillnaメソッドに引数として渡すと、欠損値を他の値の中央値で補完できる。 mode().iloc[0.:]の結果をfillnaメソッドに引数として渡すと、欠損値を最頻値で補完できる。 25. DataFrameの基本統計量に関する次の記述のうち、誤っているものはどれか。 stdメソッドは標準偏差を取得できる。 quartileメソッドは第3四分位数を取得できる。 meanメソッドは平均値を取得できる。 modeメソッドは最頻値を取得できる。 countメソッドはデータの件数を取得できる。 26. pandasの関数やメソッド等に関する次の記述のうち、正しいものはどれか。 相関係数はcorr関数で出力でき、その値は必ず-1から1の間となる。1に近いほど強い相関関係があり、-1では相関関係がないといえる。 行数の多いDataFrameを確認するときにheadメソッドとtailメソッドが役に立つ。特に引数を指定しない場合、headメソッドは先頭10行を、tailメソッドは末尾10行を返す。 concat関数は、2つのDataFrameを連結する。引数にaxis=1を加えると行方向の連結となり、axis=0を加えると列方向の連結となる。 DataFrameをNumPy配列に変換するには、values属性を利用する。この場合、カラム名とインデックス名は共に保持されない。 statistics関数に引数としてDataFrameを渡すとDataFrameの統計量をまとめて出力することができる。 27. Matplotlibに関する次の記述のうち、正しいものはどれか。 「MATLABスタイル」は一つのfigureオブジェクトに対して複数のサブプロットを指定できる。つまり複数のグラフをまとめて表示できるという利点がある。 サブプロットにはlegendメソッドで凡例を表示することができる。legendメソッドの引数に loc="min" を指定するとデータとの重なりが最小な位置に出力できる。 ヒストグラムはhistメソッドで、散布図はscatterメソッドで、箱ひげ図はboxbeardメソッドで、円グラフはpieメソッドで描画することができる。 描画オブジェクトにはset_titleメソッド、サブプロットにはsuptitleメソッドで、それぞれタイトルを指定できる。 棒グラフとは異なり、ヒストグラムでは複数の値を指定すると、自動的に横に並んだ状態で表示される。 28. Matplotlibに関する次の記述のうち、正しいものはどれか。 棒グラフや散布図には、color引数またはedgecolor引数のどちらか一方が指定できる。color引数には塗りつぶしの色を、edgecolor引数には枠線の色を指定する。 折れ線グラフやグラフの枠線、区切り線など、さまざまな線にスタイルを適用できる。linewidth引数を指定すると線の幅を変更でき、その際の単位はピクセルである。 散布図では、デフォルトではそれぞれのマーカーは丸で描画されるが、marker引数にマーカーの形を指定することにより、様々な形のマーカーを使用することができる。 同じフォントの指定を複数回繰り返す場合、フォントの設定をタプルデータとして作成し、fontdict引数に一度に指定できる。タプルはイミュータブルなため、誤って上書きされることを防ぎやすい。 textメソッドを使用するとグラフに任意のテキストを描画できる。第一、第二引数には描画するテキストの左上のX, Y座標を指定する。また、フォントのスタイルと同様の引数の指定もできる。 29. Matplotlibを用いてsin, cosのグラフを描画する次のスクリプトに関する説明のうち誤っているものはどれか。 import numpy as np import matplotlib.pyplot as plt x = np.arange(0.0, 15.0, 0.1) y1 = np.sin(x) y2 = np.cos(x) fig, ax = plt.subplots() ax.plot(x, y1, label='sin') ax.plot(x, y2, label='cos') ax.legend() plt.show() plotメソッドは折れ線グラフのほか、上記スクリプトのように個々の値の間隔を細かくすることで疑似的に曲線のグラフも作成できる。 np.sin(x)、np.cos(x)は、それぞれ引数「x」を弧度法のラジアンで処理する。 xの要素数は150である。 このグラフのX軸、Y軸に軸ラベルはない。 上記スクリプトの描画オブジェクトの中に配置されるサブプロットは2つである。 30. 次のスクリプトに関する説明のうち正しいものはどれか。 import matplotlib.pyplot as pltfig, ax = plt.subplots()x = [1, 2, 3]y1 = [10, 2, 3]y2 = [5, 3, 6]labels = ['red', 'blue', 'yellow']【ア】ax.bar(x, y_total, tick_label=labels, label='y1')#…【イ】ax.bar(x, y2, label='y2')#…【ウ】ax.legend()plt.show() 【ア】に入るコードは、y_total = [num1 + num2 for num1, num2 in sum(y1, y2)]である。 描画されるグラフの目盛りには「y1」「y2」が表示される。 描画されるグラフには「red」「blue」「yellow」が凡例として表示される。 【イ】の行と【ウ】の行を入れ替えてもグラフの表示は変化しない。 このコード群は積み上げ棒グラフを描画するものである。 31. Matplotlibを用いて正規分布に従うランダムな値をヒストグラムで描画する次のコード群に関する説明のうち正しいものはどれか。import numpy as npimport matplotlib.pyplot as pltnp.random.seed(123)mu = 100sigma = 15x = np.random.normal(mu, sigma, 1000)fig, ax = plt.subplots()n, bins, patches = ax.hist(x, bins=25, orientation='horizontal')for i, num in enumerate(n): print('{:.2f} - {:.2f} {}'.format(bins[i], bins[i + 1], num))plt.show() 変数muは標準偏差を、変数sigmaは平均値を意味する。 ヒストグラムは縦向きに描画される。 histメソッドのデフォルトのビン数は5であるが、上記スクリプトで出力されるヒストグラムのビンの数は25である。 このコード群を複数回実行した場合、必ずしも同じ結果になるわけではない。 このスクリプトを実行するとヒストグラムに加えて度数分布表が出力される。 32. Matplotlibを用いて円グラフを描画する次のスクリプトに関する説明のうち正しいものはどれか。 import matplotlib.pyplot as plt labels = ['spam', 'ham', 'egg'] x = [10, 3, 1] fig, ax = plt.subplots() ax.pie(x, labels=labels, startangle=90, counterclock=False, shadow=True, autopct='%1.2f%%') plt.show() 円グラフには影がない 円グラフの値は小数点以下1桁までが表示される 円グラフは3時の位置から配置される 円グラフは反時計回りに配置される 円グラフのアスペクト比は保持されない 33. 機械学習の前処理に関する次の記述のうち、誤っているものはどれか。 One-hotエンコーディングは、ダミー変数化とも呼ばれ、生成された列の変数はダミー変数とも呼ばれる。scikit-learnでは、preprocessingモジュールのget_dummies関数を用いて実行できる。 分散正規化とは、特徴量の平均が0、標準偏差が1となるように特徴量を変換する処理であり、標準化やz変換と呼ばれることもある。scikit-learnでは、preprocessingモジュールのStandardScalerクラスを用いて実行できる。 最小最大正規化とは、特徴量の最小値が0、最大値が1を取るように特徴量を正規化する処理であり、scikit-learnでは、preprocessingモジュールのMinMaxScalerクラスを用いて実行できる。 カテゴリ変数のエンコーディングとは、文字のaを数値の0、bを1、cを2のようにカテゴリ変数を数値に変換する処理をいう。scikit-learnでは、preprocessingモジュールのLabelEncoderクラスを用いて実行できる。 特徴量の正規化とは、たとえば、ある特徴量の値が4桁の数値(数千のオーダ)、別の特徴量の値が2桁の数値(数十のオーダ)のような場合、前者のオーダの特徴量が重視されやすくなるため、尺度を揃える処理をいう。 34. 分類に関する次の記述のうち、誤っているものはどれか。 分類モデルを構築するには、まず手元のデータセットを学習データセットとテストデータセットに分割し、学習データセットを用いて分類モデルを構築する。 学習データセットとテストデータセットの分割は、scikit-learnでは、model_selectionモジュールのtrain_test_split関数を用いて実行できる。train_test_split関数の第1引数には目的変数を表すNumPy配列を、第2引数には説明変数(特徴量)を表すNumPy配列やpandasのDataFrameを指定する。 構築したモデルが持つ未知のデータに対する対応能力を「汎化能力」という。 分類は、データのクラスを予測して分けるタスクであり、既知のデータを教師として利用して各データをクラスに振り分けるモデルを学習する教師あり学習の典型的なタスクである。 scikit-learnのインターフェースでは、学習はfitメソッド、予測はpredictメソッドを用いて実行できる。 35. 機械学習のアルゴリズムに関する次の記述のうち、正しいものはどれか。 決定木などで利用される木と呼ばれるデータ構造はエッジとそれらを結ぶノードから構成される。木の最下部にあり親ノードを持たないノードは根ノードと呼ばれる。 ランダムフォレストは、データのサンプルと特徴量をランダムに選択して決定木を構築する処理を複数回繰り返し、各木の推定結果の多数決や平均値により分類・回帰を行う手法である。 サポートベクタマシンは、分類のためのアルゴリズムである。空間上で分離できないデータを平面や直線など低次元の空間に写像して線形分離することで分類を行うものである。 サポートベクタマシンで決定境界を求める際にマージンを最小にすべき理由は、決定境界がサポートベクタから近くなり、多少のデータが変わっても誤った分類を行う可能性を低くできると期待できるからである。 情報利得は子ノードの不純度から親ノードの不純度を差し引いたものとして定義される。不純度の指標としてはジニ不純度、エントロピー、分類誤差などが用いられる。 36. 次のスクリプトに関する説明のうち誤っているものはどれか。 from sklearn.linear_model import LinearRegression from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split boston = load_boston() X, y = boston.data, boston.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=123) lr = LinearRegression() lr.fit(X_train, y_train ) y_pred = lr.predict(X_test) このスクリプトは米国ボストン市郊外の地域別に、人口一人当たりの犯罪件数や住居の部屋数の平均などを含む14個の特徴量と住宅価格を記録したデータセットを用いて線形回帰を行うものである。 このスクリプトの最終行では、学習したモデルを用いてテスト用の説明変数から予測される目的変数を取得している。 5行目のboston.dataには説明変数、boston.targetには目的変数が格納されている。 データセットは学習用が3割、テスト用が7割の比率で分割される。 このスクリプトで行う回帰は住宅価格を特徴量から求める重回帰である。 37. 次の2つのスクリプトに関する説明のうち誤っているものはどれか。[ スクリプトA ]import numpy as npimport matplotlib.pyplot as pltnp.random.seed(123)X = np.random.random(size=50)Y = 2*X + 0.5*np.random.rand(50)fig, ax = plt.subplots()ax.scatter(X, Y)plt.show()[ スクリプトB ]from sklearn.decomposition import 【A】ist = 【A】(n_components=2)X_ist = ist.fit_transform(np.hstack((X[:, np.newaxis], Y[:, np.newaxis]))) …【B】fig, ax = plt.subplots()ax.scatter(X_ist[:, 0], X_ist[:, 1])ax.set_xlabel('PC1')ax.set_ylabel('PC2')ax.set_xlim(-1.1, 1.1)ax.set_ylim(-1.1, 1.1)plt.show() スクリプトAは最終的に50個の2次元データを散布図で描画している。 【A】に入るのは「PCA」である。 【B】ではfit_transformメソッドに、データの座標を表すNumPy配列を指定している。 スクリプトBでは、もとのデータを新たな1次元のデータに変換し、次元削減している。 このスクリプトは何度実行しても必ず同じ結果となる。 38. モデルの評価指標に関する次の記述のうち、正しいものはどれか。 適合率は、たとえば病院の検診で病気の見逃し・取りこぼしがないようにしたい場合などに重視される、網羅性に関する指標である。 再現率は、間違えることをできるだけ避けたい場合に重視する指標である。一般的に適合率と再現率はトレードオフの関係にある。 F値は、適合率と再現率の算術平均として定義される。F値は2*適合率*再現率/(適合率+再現率)で計算することができる。 正解率は、正例か負例かを問わず、予測と実績が一致したデータの割合を表す。正解率は(tp+tn)/(tp+fp)で計算することができる。 適合率、再現率、F値、正解率は、機械学習を用いて構築した分類モデルの良し悪しを評価する指標であり、混同行列から計算する。 39. 次のスクリプトに関する説明のうち誤っているものはどれか。 from sklearn.datasets import load_iris from sklearn.model_selection import GridSearchCV from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split iris = load_iris() X, y = iris.data, iris.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=123) clf = DecisionTreeClassifier() param_grid = {'max_depth': [3, 4, 5]} cv = GridSearchCV(clf, param_grid=param_grid, cv=10) cv.fit(X_train, y_train) y_pred = cv.predict(X_test) このスクリプトではハイパーパラメータである決定木の深さをグリッドサーチにより求めている。 このスクリプトで用いられているIrisデータセットには、150枚のアヤメの「がく」や「花びら」の長さと幅、そして花の種類が記録されている。 このスクリプトにおいて花の種類は説明変数であり、スクリプトの6行目で変数「X」に格納されている。 このスクリプトの最終行では学習したモデルを用いてテスト用の説明変数から予測される目的変数を取得している。 このスクリプトで求められる決定木の深さの最適値は必ず3から5の整数のいずれかとなる。 40. クラスタリングに関する次の記述のうち、誤っているものはどれか。 k-meansは最初にランダムにクラスタ中心を割り当て、クラスタ中心を各データとの距離を計算しながら修正し、最終的なクラスタ中心が収束するまで再計算を行いクラスタリングする手法である。 k-meansは、scikit-learnのclusterモジュールのKMeansクラスを用いることによって実行することができる。 凝集型の階層的クラスタリングは、まず似ているデータをまとめて小さなクラスタを作り、次にそのクラスタと似ているデータをまとめ、最終的にデータが1つのクラスタにまとめられるまで処理を繰り返すクラスタリング手法である。 クラスタリングは、ある基準を設定してデータ間の類似性を計算し、データをクラスタ(グループ)にまとめるタスクであり、教師あり学習の典型的なタスクである。 クラスタリングにおいては、得られたクラスタの妥当性に絶対的な答えはない。 Time's up試験は終了です。「回答を送信」ボタンを押下してください。