第1回 Python 3 エンジニア認定データ分析 模擬試験 第1回 Python 3 データ分析 模擬試験 へようこそ。 以下の各項目を入力後、「次へ」をクリックして模擬試験を開始してください。 ※あらかじめ利用規約をご確認ください(プライム・ストラテジーから採用やイベントの情報など届くことがあります)。 ※結果の詳細は入力いただいたメールアドレス宛てにのみお送りします。必ず確認可能なメールアドレスを入力してください。 お名前 メールアドレス(結果の詳細をお送りします) 利用規約に同意する。 1. データ分析に関する次の記述のうち、誤っているものはどれか。 データサイエンティストの役割には、モデルやアルゴリズム構築、新たな解法や新技術への取り組み、解決したい課題に向き合う実務、分析結果の評価などがある。 データサイエンティストの役割は、研究分野と実務で多少の違いがある。研究分野においては、新たな解法や新技術への取り組みが重視され、実務においては、解決したい課題に向き合う部分が重視される。 データ分析に利用されるプログラミング言語には、Python、R、Julia、Excel、Visual Basic for Applicationsなどがある。 Pythonでデータ分析に使われる主なツールには、Jupyter Notebook、NumPy、pandas、Matplotlib、SciPy、scikit-learnなどがある。 Pythonはデータ分析以外の分野でも活用されており、Webアプリなどのフロントエンド、速度向上のための低レイヤー処理などの分野においても他のプログラミング言語に比して優位性が高い。 2. 機械学習に関する次の記述のうち、正しいものはどれか。 教師あり学習の1つであるDBSCAN法は密度準拠クラスタリングアルゴリズムであり、特徴量ベクトル間の距離に着眼した手法である。 教師あり学習は、正解となるラベルデータが存在する場合に用いられる方式であり、そのラベルを目的変数という。 教師あり学習は、説明変数の種類により回帰と分類の2種類に分けられる。回帰は目的変数が連続値となる。 教師なし学習は、正解ラベルを用いない学習方法であり、クラスタリングや次元削減といったタスクを行う。典型的なものにニューラルネットワークを用いた深層学習がある。 強化学習は、ブラックボックス的な環境の中で行動するエージェントが、得られる報酬を最大化するように学習する方法であり、ルールベースと比較される機械学習の伝統的な手法である。 3. PythonおよびPythonの実行環境に関する次の記述のうち、誤っているものはどれか。 pipコマンドは、The Python Package Index に公開されているPythonパッケージのインストールなどを行うユーティリティであり、パッケージをインストールするにはpip installコマンドを使用する。 AnacondaはAnaconda社が開発、配布しているPythonのディストリビューションであり、venv、pipとは異なる仮想環境の作成方法、パッケージ管理システムを採用している。 Pythonでは、シンプルで読みやすいコードが書けることを設計思想として文法が作られている。コードのブロック構造をカッコではなくインデントで表現するところにもその思想が表れている。 venvはPythonの仮想環境を作成する仕組みである。WindowsでもmacOSでも利用することができ、異なるバージョンのPython言語を使い分けるのに便利である。 PythonにはPEP 8と呼ばれる標準となるコーディング規約が存在する。たとえば、複数のモジュールをインポートするときには、1行ずつインポートして書くべきとされている。 4. 次のコード群の2行目以降を代替できるリスト内包表記として正しいものはどれか。names = ['spam', 'ham', 'eggs' ]lens =[]for name in names: lens.append(len(name))lens [lens(name) in names for name] {lens(name) in names for name} [lens(name) for name in names] {len(name) for name in names} [len(name) for name in names] 5. 次の正規表現を用いたスクリプトの[ ア ]の部分に入れたときエラーと表示されるものはどれか。 import re prog = re.compile(r'py?(th|ers)oni?(a[lmn]|c)?', re.IGNORECASE) [ ア ] if ret is None: print('エラー') else: print(ret[0]) ret = prog.search('Python') ret = prog.search('personal') ret = prog.search('pythomian') ret = prog.search('PYTHONIC') ret = prog.search('The Zen of Python') 6. モジュールに関する次の記述のうち誤っているものはどれか。 loggingモジュールはログレベルを指定して任意のファイルにフォーマットを指定してログの出力を行うことができ、たとえば、バッチ処理などの途中経過を出力する用途に用いる。 loggingモジュールのログレベルには、重要度の低い順にDEBUG、INFO、WARNING、ERROR、CRITICALの5つがある。 pickleモジュールは、Pythonのオブジェクトをシリアライズしてファイルなどで読み書きできるようにすることができ、標準出力をバッファリングして制御するために便利である。 Pythonでファイルのパスを扱うにはpathlibモジュールが便利である。globメソッドではファイル名をワイルドカード(*)で指定することもできる。 日付などの処理にはdatetimeモジュールが便利である。たとえば、過去の日付から今日の日付を差し引いて経過日数を計算することができる。 7. Jupyter Notebookに関する次の記述のうち誤っているものはどれか。 Jupyter Notebookはオープンソースで開発されているデータ分析、可視化、機械学習などに広く利用されているWebアプリケーションである。 Notebookファイルは保存することができ、その拡張子は.ipynbである。 マジックコマンドは%または%%からはじまる特別なコマンドで、たとえば、プログラムの実行時間を複数回試行して計測を行うコマンドもある。 シェルコマンドはOSのコマンドを指定して実行することができる。たとえば、pip listコマンドを実行することもできる。 NotebookファイルはYAML形式で記述されており、プログラムや結果を参照するためには基本的にはJupyter Notebookを実行する必要があるが、yumなどのリポジトリサービスはNotebookファイルの表示に対応しているため、これらを利用して参照することができる。 8. 数学の基礎に関する次の記述のうち誤っているものはどれか。 数式で、足し算の繰り返しを表す際にはギリシャ文字のシグマの大文字を用い、掛け算の繰り返しを表す際には、ギリシャ文字のパイの大文字を用いる。 直径が1のときの円周の長さを円周率と呼び、自然対数の底をネイピア数と呼ぶ。両者とも小数点以下を四捨五入すると3になる。 関数の入力が別の数字の肩に乗って使われる関数を指数関数と呼び、入力された値が底の何乗に相当するかという出力を行う関数を対数関数と呼ぶ。 指数関数を応用した関数にシグモイド関数がある。シグモイド関数は、深層学習の基本的な技術であるニューラルネットワークでよく使われる。 三角関数のsinは「サイン」と読み、日本語では上弦という呼び名がある。また、cosは「コサイン」と読み、日本語では下弦という呼び名がある。 9. (3, 4) で表現されるベクトルをAとする。(4, 7)で表現されるベクトルをBとする。(2, 4, 5) で表現されるベクトルをCとする。次のベクトルに関する記述のうち正しいものはどれか。 Aの原点からのユークリッド距離は5である。 Bの原点からのマンハッタン距離は9である。 AとBの内積は36である。 AとCの和は18である。 AとCの差は52である。 10. 行列に関する次の記述のうち誤っているものはどれか。 行と列のサイズが同じ行列を特に正方行列と呼び、正方行列のうち、対角成分がすべて0で、残りの要素が1の行列を単位行列と呼ぶ。 ベクトルと同じように要素同士の足し算と引き算で、行列の足し算と引き算を定義することができるが、2つの行列の行数と列数が合っている必要がある。 行列の列の数とベクトルのサイズが同じ場合は、これらの掛け算を定義することができ、結果は、元の行列の行数と同じサイズのベクトルになる。 行列同士の掛け算は行列となる。数値の掛け算は順番を入れ替えても同じ結果となるが、行列の掛け算は順番を入れ替えると同じ結果になるとは限らない。 m×sの行列にs×nの行列を掛けると、m×nの行列になる。これを逆に考えると、データ分析や機械学習において、説明変数の次元数を削減することができる。 11. 右辺が6x^2(6掛けるxの二乗)で表現される関数をf(x)とする。微分積分に関する以下の記述のうち誤っているものはどれか。 関数f(x)を微分すると、右辺は12xとなる。 関数f(x)を積分すると、右辺は3x^3となる。 積分の範囲が決められていないものを不定積分、範囲が決められているものを定積分という。 微分は傾き、積分は面積と捉えることができる。データ分析や機械学習において、関数の傾きが0となる点は有益な情報として利用される。 多変数関数の微分を偏微分という。偏微分の場合、変数が複数あるので、どの変数で微分したのかを示すことが必要となる。 12. 確率と統計に関する次の記述のうち、正しいものはどれか。 5段階評価のアンケートの回答で、もっとも回答者数が多かった評価が4であった場合、このアンケートの中央値は4であるといえる。 分散は、すべてのデータの平均値からの差分をデータの個数で割った値である。 12面体のサイコロを1回振った場合の期待値は6である。 6面体のサイコロを1回振った場合、その出目の数自体は不明なものの、奇数がでていることを教えられたとする。この場合の確率を条件付き確率と呼び、これはベイズの定理の基本となっている。 確率変数を引数にとって値を返す関数のうち、確率変数が離散的な場合を確率密度関数、確率変数が連続的な場合を確率質量関数という。標準正規分布などの確率分布は確率質量関数から得ることができる。 13. 「ネイピア数、tan(45°)、円周率、1の対数、1の階乗」の5つの数からなるデータがある。このデータについて正しいものはどれか。 ネイピア数は円周率より大きい tan(45°)は中央値より大きい 最頻値は1である 算術平均は中央値より小さい 中央値は2より大きい 14. NumPyに関する次の記述のうち、誤っているものはどれか。 NumPyは配列や行列を効率よく扱うためのPythonのサードパーティ製パッケージで、配列用の型であるndarrayと行列用の型であるmatrixがある。 NumPyオブジェクトの型を確認するためにはtype関数を、NumPy配列の形状を確認するためにはshapeメソッドを用いることができる。 NumPy配列の次元の変換を行うためにはreshapeメソッドを、2次元のNumPy配列を1次元に変換するにはravelメソッドまたはflattenメソッドを用いることができる。 NumPy配列の次元変換に用いるravelメソッドはコピーを返し、flattenメソッドは参照を返す。 NumPy配列の要素のデータ型を確認するには、dtype属性を用いることができる。 15. 次のスクリプトを実行した結果として正しいものはどれか。import numpy as npa = np.array([[1, 2, 3], [4, 5, 6]])b = np.array([1, 2, 3])print(a[-1:, [1, 2]], b.dtype) [[1 2], [4 5]] float16 [[1 2], [4 5]] int16 [[1 2], [4 5]] int64 [[5 6]] int64 [[5 6]] int16 16. 次のスクリプトを実行した結果として正しいものはどれか。import numpy as np a = np.arange(1, 10, 3) b = np.eye(5) print(a[-1], b[2, 2]) 7 1.0 4 1.0 10 0.0 7 3.0 4 0.0 17. 次のスクリプトを実行した結果として正しいものはどれか。import numpy as npa = np.full((1, 5), np.e).T.ravel()b = np.linspace(0, 1, 5)c = np.hstack([a, b])print(a[-1], c[-1]) 2.718281828459045 5.0 2.718281828459045 1.0 3.141592653589793 1.0 3.141592653589793 5.0 3.141592653589793 0.0 18. 次のスクリプトを実行した結果として正しいものはどれか。import numpy as npa = np.array([0, 9, 99, 999])a = a + 1a = a * 100b = np.log10(a)print(a[1], b[2]) 1000 3.0 100 2.0 1000 2.0 100 4.0 1000 4.0 19. 次のスクリプトを実行した結果として正しいものはどれか。import numpy as npa = np.array([1, 3])b = np.array([-1, 5])c = np.array([[1, 2], [3, 4]])d = a @ be = np.dot(c, a)print(d, e) 13 [ 8 18] 14 [ 7 15 ] -2 [ 8 18 ] 2 [ 9 17 ] 2 [ 7 15 ] 20. 次のスクリプトを実行して10を出力させたい。[ア]に入るものの説明として正しいものはどれか。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.iloc["A", "03"] または a = df.loc[0, 2] a = df.iloc["A", "03"] または a = df.loc[3, 1] a = df.loc["03", "A"] または a = df.iloc[2, 0] a = df.loc["03", "A"] または a = df.iloc[3, 1] a = df["A", "03"] 21. pandasのデータの読み込みと書き込みに関する次の記述のうち誤っているものはどれか。 CSVファイルからのデータの読み込みは、read_csvメソッドを、CSVファイルへのデータの書き込みはto_csvメソッドを用いることができる。 Execlファイルからのデータの読み込みは、read_excelメソッドを、Excelファイルへのデータの書き込みはto_excelメソッドを用いることができる。 WebサイトのHTML内のtable要素からのデータの読み込みは、read_htmlメソッドを、htmlファイルへのデータの書き込みはto_htmlメソッドを用いることができる。 バイナリファイルからのデータの読み込みは、read_blobメソッドを、バイナリファイルへのデータの書き込みはto_blobメソッドを用いることができる。 DataFrameを直列化してファイルとして保存し、再利用するためにpickleモジュールを利用することができる。 22. 次のスクリプトを実行した結果として正しいものはどれか。import pandas as pddf = pd.DataFrame([[40, "a", True],[20, "b", False],[30, "c", False]])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.loc[:, "C"] = df.iloc[:, 0] * 2df.loc[:, "B"] = df.iloc[:, 2].apply(judge)_ = df["C"] > 50df = df[_]print(df.iloc[0 , 0], df.iloc[1 ,1]) 20 middle 30 middle 40 middle 30 high 40 high 23. 次のスクリプトに関する説明のうち誤っているものはどれか。import numpy as npimport pandas as pdnp.random.seed(123)dates = pd.date_range(start="2017-04-01", periods=365)df = pd.DataFrame(np.random.randint(1, 31, 365), index=dates, columns=["rand"])df_year = pd.DataFrame(df.groupby(pd.Grouper(freq='W-SAT')).sum(), columns=["rand"]) 3行目は、乱数の発生に特定のシード値を与える処理である。これはスクリプトの実行結果の再現性を確保するための処理である。 4行目は、2017年4月1日から365日分の日付の配列を生成する処理である。periods=365 を end="2018-03-31" としても同じ結果となる。 5行目は、日付をインデックスとするDataFrameを作成している。rand列の各値は、1から31までのランダムな整数となる。 6行目は、土曜日の日付をインデックスとするDataFrameを生成する処理である。rand列の各値は日曜日から土曜日までのrand列の値を合計したものとなる。 6行目の freq="W=SAT" を freq="M" に変更すると生成されるDataFrameの行数は12となる。 24. DataFrameの欠損値の処理に関する次の記述のうち、誤っているものはどれか。 欠損値が存在する行や列を削除するメソッドは、dropnaである。 fillnaメソッドの引数にmethod='ffill'を与えると、欠損値を1つ前方の値で補完する。 fillnaメソッドの引数にmethod='median'を与えると、欠損値を中央値で補完する。 fillnaメソッドの引数にmethod='bfill'を与えると、欠損値を1つ後方の値で補完する。 fillnaメソッドの引数に0を与えると、欠損値を0で補完する。 25. DataFrameの基本統計量に関する次の記述のうち、誤っているものはどれか 。 stdメソッドは分散を取得できる。 countメソッドは件数を取得できる。 modeメソッドは最頻値を取得できる。 medianメソッドは中央値を取得できる。 describeメソッドは平均値を取得できる。 26. pandasに関する次の記述のうち、正しいものはどれか 。 相関係数は、カラム間のデータの関係を数値で表すものであり、describeメソッドで取得する。 DataFrameをNumPy配列に変換するには、values属性を利用する。この場合、インデックス名、カラム名は保持されない。 concat関数は、2つのDataFrameを連結する。引数にaxis=0を加えると列方向の連結となり、axis=1を加えると行方向の連結となる。この場合、行列の順序は必ず保持される。 pandasはNumPyを基盤に2次元のDataFrameと、より多次元のSeriesをデータ型として提供している。 corr関数に引数としてDataFrameを渡すと基本統計量グラフを出力することができる。 27. Matplotlibに関する次の記述のうち、誤っているものはどれか 。 matplotlib.style を利用すると線の色、太さ、背景色などグラフの表示スタイルを指定することができる。 描画オブジェクトとサブプロットにはそれぞれsuptitleメソッド、set_titleメソッドでタイトルを指定することができる。 サブプロットにはlegendメソッドで凡例を表示することができる。legendメソッドの引数に loc="best" を指定するとデータとの重なりが最小な位置に出力できる。 作成したグラフをsavefigメソッドでファイルに出力することができる。ファイル形式としては、png、pdf、svgなどが選択可能である。 折れ線グラフはplotメソッドで、棒グラフはbarメソッドで、散布図は、histメソッドで、円グラフはcircleメソッドで描画することができる。 28. Matplotlibに関する次の記述のうち、誤っているものはどれか 。 折れ線グラフの線の幅は指定することができる。たとえば、10ポイントの幅の指定は、plotメソッドの引数に linewidth=10 と指定する。 タイトルなどのテキストに対してもスタイルを指定することができる。たとえば、サブプロットのタイトルのフォントファミリーをmonospaceに指定するには、set_titleメソッドの引数に family='monospace' と指定する。 同じフォントの指定を複数回繰り返す場合、フォントの設定をタプルデータとして作成し、fontdict引数に一度に指定することができる。タプルデータは上書きができないため、誤って上書きされることを防ぎやすい。 グラフに表示する線、背景色、枠線などの要素に色を指定することができる。たとえば、赤い折れ線グラフを描画するには、plotメソッドの引数に color='red' と指定する。 textメソッドを使用するとグラフに任意のテキストを描画できる。第一、第二引数には描画するテキストの左下のX, Y座標を指定する。また、フォントのスタイルと同様の引数の指定もできる。 29. Matplotlibを用いてsin, cosのグラフを描画する次のコード群に関する説明のうち正しいものはどれか。import numpy as npimport matplotlib.pyplot as pltx = 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() np.sin(x)は上弦曲線の配列を生成する。x=1のとき、y1は0.594となる。 np.cos(x)は下弦曲線の配列を生成する。x=5のとき、y2はRUIとなる。 xの要素数は149である。 このグラフに凡例はない。 描画オブジェクトの中に配置されるサブプロットは1つである。 30. 次のコード群に関する説明のうち誤っているものはどれか。import matplotlib.pyplot as plt fig, ax = plt.subplots() x = [1, 2, 3] y1 = [10, 2, 3] y2 = [5, 3, 6] labels = ['spam', 'ham', 'egg'] [ア] ax.bar(x, y_total, tick_label=labels, label='y1') ax.bar(x, y2, label='y2') [イ] plt.show() このコード群は積み上げ棒グラフを描画するものである。 描画されるグラフにはラベルがある。 barメソッドの引数に変数y1は利用されていない。 [ア]に入るコードは y_total = [num1 + num2 for num1, num2 in sum(y1, y2)] である。 [イ]に入るコードは ax.legend() である。 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は標準偏差を意味する。 ヒストグラムは横向きに描画される。 出力されるテキストの行数は25行である。 このコード群を複数回実行した場合、必ずしも同じ結果になるわけではない。 32. Matplotlibを用いて円グラフを描画する次のコード群に関する説明のうち誤っているものはどれか。import matplotlib.pyplot as pltlabels = ['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() 円グラフには影がある 円グラフには値のパーセント表記がある 円グラフのアスペクト比は保持されない 円グラフは上から配置される 円グラフは反時計回りに配置される 33. 機械学習の前処理に関する次の記述のうち、誤っているものはどれか。 カテゴリ変数のエンコーディングとは、文字のaを数値の0、bを1、cを2のようにカテゴリ変数を数値に変換する処理をいう。 One-hotエンコーディングでは、たとえば、テーブル形式のデータのカテゴリ変数の列について、取り得る値の分だけ列を増やして、各行の該当する値の列のみに1を、それ以外の列には0を入力するように変換する処理をいう。 特徴量の正規化とは、たとえば、ある特徴量の値が2桁の数値(数十のオーダ)、別の特徴量の値が4桁の数値(数千のオーダ)のような場合、後者のオーダの特徴量が重視されやすくなるため、尺度を揃える処理をいう。 分散正規化とは、特徴量の平均が1、標準偏差が0となるように特徴量を変換する処理であり、標準化やz変換と呼ばれることもある。 最小最大正規化とは、特徴量の最小値が0、最大値が1を取るように特徴量を正規化する処理であり、scikit-learnでは、preprocessingモジュールのMinMaxScalerクラスを用いて実行することができる。 34. 分類に関する次の記述のうち、誤っているものはどれか。 分類は、データのクラスを予測して分けるタスクであり、未知のデータを教師として利用して各データをクラスに振り分けるモデルを学習する教師あり学習の典型的なタスクである。 分類モデルを構築するには、まず手元のデータセットを学習データセットとテストデータセットに分割する。そして、学習データセットを用いて分類モデルを構築し、構築したモデルのテストデータセットに対する予測を評価し、汎化能力を評価する。 学習とモデルの評価は、学習データセットとテストデータセットの分割を繰り返し、モデルの構築と評価を複数回行う方法で行うこともできる。この方法を交差検証という。 学習データセットとテストデータセットの分割は、scikit-learnでは、model_selectionモジュールのtrain_test_split関数を用いて実行することができる。 scikit-learnのインターフェースでは、学習はfitメソッド、予測はpredictメソッドを用いて実行することができる。 35. 機械学習のアルゴリズムに関する次の記述のうち、誤っているものはどれか。 ランダムフォレストは、ブートストラップデータを用いて決定木を構築する処理を複数回繰り返し、各木の推定結果の多数決や平均値により分類・回帰を行う手法であり、アンサンブル学習の1つである。 決定木などで利用される木と呼ばれるデータ構造は頂点であるノードとそれらを結ぶエッジから構成される。木の最下部にあり子ノードを持たないノードはリーフと呼ばれる。 決定木でデータを分割する時は、データの分割によってどれだけ得をするかについて考える。これを情報利得と呼ぶ。情報利得は親ノードの不純度から子ノードの不純度を差し引いたものとして定義される。 サポートベクタマシンは、分類・回帰だけでなく外れ値検出にも使えるアルゴリズムであり、直線や平面などで分離できないデータであっても、高次元の空間に写して線形分離することにより分類を行うことを可能にする。 サポートベクタマシンは、マージンを最小にすることにより決定境界を求めるが、これは、決定境界がサポートベクタから近くなり多少のデータが変わっても誤った分類を行う可能性をを低くし、汎化能力を持たせようとしているためである。 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) このスクリプトは米国ボストン市郊外の地域別に、住宅価格と特徴量を記録したデータセットを用いて線形回帰を行うものである。 このスクリプトで行う回帰は住宅価格を特徴量から求める単回帰である。 データセットは学習用が7割、テスト用が3割の比率で分割される。 X_trainは学習用の説明変数、y_trainは学習用の目的変数である。 このスクリプトの最終行では、学習したモデルを用いてテスト用の説明変数から予測される目的変数を取得している。 37. 次元削減に関する次の記述のうち、正しいものはどれか。 次元削減は、データが持っている情報をなるべく損ねることなく次元を削減してデータを展開するタスクである。具体的には目的変数の数を減らして計算量を削減する。 次元削減の主目的は目的変数の数を減らして計算量を削減することであるが、説明変数の削減を行うことは少ない。これは、モデルの精度を確保するためである。 主成分分析とは、高次元のデータに対して標準偏差が小さくなる方向を探して、元の次元と同じかそれよりも高い次元にデータを変換する手法である。 主成分分析は、scikit-learnのdecompositonモジュールのPCAクラスを用いて実行することができる。 2次元のデータに対して主成分分析を行い、新たな2変数に変換した結果、第一主成分と第二主成分がともに重要であると確認できた場合、1次元に次元を削減できる可能性が高い。 38. モデルの評価指標に関する次の記述のうち、誤っているものはどれか。 機械学習を用いて構築した回帰モデルの良し悪しを評価する指標に適合率、再現率、F値、正解率がある。これらは混同行列から計算する。 適合率は予想するクラスをなるべく間違えないようにしたいときに重視する指標である。 一般的に適合率と再現率はトレードオフの関係にある。つまり、どちらか一方の指標を高くすると、もう一方の指標は低くなる。 正解率は、正例か負例かを問わず、予測と実績が一致したデータの割合を表す。正解率は(tp+tn)/(tp+fp+fn+tn)で計算することができる。 F値は、適合率と再現率の調和平均として定義される。F値は2*適合率*再現率/(適合率+再現率)で計算することができる。 39. 次のスクリプトに関する説明のうち誤っているものはどれか。 from sklearn.datasets import load_irisfrom sklearn.model_selection import GridSearchCVfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.model_selection import train_test_splitiris = load_iris()X, y = iris.data, iris.targetX_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枚のアヤメの「がく」や「花びら」の長さと幅、そして花の種類が記録されている。 このスクリプトでは10分割の交差検証が実行される。 このスクリプトで求められる決定木の深さの最適値は必ず3から5の整数のいずれかとなる。 40. クラスタリングに関する次の記述のうち、誤っているものはどれか。 クラスタリングは、ある基準を設定してデータ間の類似性を計算し、データをクラスタ(グループ)にまとめるタスクであり、教師なし学習の典型的なタスクである。 凝集型の階層的クラスタリングは、まず似ているデータをまとめて小さなクラスタを作り、次にそのクラスタと似ているデータをまとめ、最終的にデータが1つのクラスタにまとめられるまで処理を繰り返すクラスタリング手法である。 分割型の階層的クラスタリングは、最初にすべてのデータが1つのクラスタに所属していると考え、順次クラスタを分割していくアプローチであり、一般的に凝集型に比べて計算量が少なく精度が高いためよく用いられる。 k-meansは最初にランダムにクラスタ中心を割り当て、クラスタ中心を各データとの距離を計算しながら修正し、最終的なクラスタ中心が収束するまで再計算を行いクラスタリングする手法である。 k-meansは、scikit-learnのclusterモジュールのKMeansクラスを用いることによって実行することができる。 Time's up試験は終了です。「回答を送信」ボタンを押下してください。