ITとかCockatielとか

技術のこととか。飼鳥(オカメインコ)のこととか。気になったこととか。基本的には備忘録。

E資格 2020年版シラバスの分析

概要

  • E資格の受験にあたり、シラバスを分析していたので、その時に作った資料の一部を掲載する。
  • 公式のシラバスこちらから入手できる。(2021.3.5現在、2019年版・2020年版が公開されている)

分析の背景

  • E資格の出題範囲は、初学者にとってはかなり広い。
  • JDLA認定プログラムは、E資格のシラバス範囲だけを厳密に取り扱っているわけではない。
    • プログラムによっては、2019年版シラバスの教材を公開し、そのままにしているものがあると思われる。(それが悪いということではない)
  • 「何が出題されるか」は事前に抑えたうえで学習したほうが効率的である。(もちろん、それだけを知っていればよいという話ではない)
  • シラバスは、学習の進捗確認や知識の最終確認としても使える。

シラバス分析結果

  • 2020年版をベースに作成。
  • 2019年版との差分を「新規」「削除」「移動」で表現。

※ 実際の資料は追加列に教材や試験対策、黒本の情報などをマッピングし、知識のチェックに活用した。

f:id:sik_bug:20210305225932p:plain

f:id:sik_bug:20210305225935p:plain

f:id:sik_bug:20210305225938p:plain

f:id:sik_bug:20210307093845p:plain

f:id:sik_bug:20210305225942p:plain

f:id:sik_bug:20210305225945p:plain

ベクトルと空間の簡単な整理

ベクトル

  • 別名:ベクター
  • 向きと大きさを持つ量。
  • 数学、物理、コンピュータの領域で使われる。
  • ベクトルは広義な意味があり、向きと大きさを持つベクトルは「空間ベクトル」というようだ。

ベクトル - Wikipedia

ベクトル空間

  • ベクトルの集まりからなる数学的構造。

ベクトル空間 - Wikipedia

計量ベクトル空間、ヒルベルト空間、ユニタリ空間

  • 別名:内積空間
  • 内積と呼ばれる付加的な構造を備えたベクトル空間。(内積を導入したベクトル空間)
  • 内積を導入することにより、ノルム(長さ)を定義することができる。
    • ノルムの定める距離を完備(完全に備えている)空間は、ヒルベルト空間と呼ばれる。
    • ヒルベルト空間では、長さや角度を測ることができる。
  • 複素数体上の内積空間は、ユニタリ空間と呼ばれる。(複素数上のベクトル空間に内積を導入したものがユニタリ空間)

計量ベクトル空間 - Wikipedia

ときわ台学/線形代数/計量ベクトル空間

ヒルベルト空間 - Wikipedia

Python 3 エンジニア認定データ分析試験【試験対策まとめ】

はじめに

  • 2019年9月末まで開催されるベータ試験に向けた学習用に作成。(以後、継続的に更新)
  • 目的は、キーワード・ポイントをまとめ、試験前の復習に使えるようにすること。
  • 解説は必要最低限とする。
    • 内容がわからない場合は、テキスト見るorググってください。
    • スライスなどの単純なものは書いてません。
  • ※オリジナルは2019年11月に書いたものです。

まとめ内容

シラバスと公式テキストに準じる

Chapter1(配点2/40)

データ分析ツール

  • Jupyter Notebook
  • NumPy
  • pandas
  • Matplotlib
  • SciPy
  • scikit-learn

データサイエンティストとは

3つの分野の知識を総合的に持ち、データ解析またはデータ解析の一連の処理及び、理解・評価を行える立場の職種。

データ分析エンジニア

データ工学を実践する1つの職種

必要な技術

  • データハンドリング
  • データの可視化
  • プログラミング
  • インフラレイヤー
  • 機械学習
  • 数学
  • 対象分野の専門知識(ドメイン知識)

データハンドリング(前処理)

機械学習の8割から9割を占める、非常に重要な処理。

機械学習

  • モデルを作る。

機械学習以外の選択肢

  • ルールベース
  • 統計的な手法

機械学習のタスク

教師あり学習(Supervised Learning)

  • 正解ラベル
  • 目的変数
  • 説明変数
  • 回帰(教師あり回帰)
  • 分類(教師あり分類)

教師なし学習(Unsupervised Learning)

強化学習(Reinforcement Learning)

報酬を最大化するように行動する学習手法

処理手順

  1. データ入手
  2. データ加工
  3. データ可視化
  4. アルゴリズム選択
  5. 学習プロセス
  6. 精度評価
  7. 試験運用
  8. 結果利用

パッケージ

Chapter2(配点5/40)

2.1 実行環境構築(配点1/5)

venv

環境作成

python -m venv test

仮想環境切り替え

Activate.ps1 #windows
activate #mac

仮想環境無効化

deactivate

pip

インストール(バージョン指定)

pip install [パッケージ名]==[バージョン番号]
pip install numpy==1.14.1

# -y :確認省略
# -U :Upgrade

アンインストール

pip uninstall numpy

リスト表示

pip list

# -o :新バージョン存在確認

バージョン統一

# 現在の環境のバージョンをテキストに出力
pip freeze > requirements.txt

# テキスト情報から環境にインストール
pip isntall -r requirements.txt

Anaconda

  • condaコマンドを利用
  • pipを使うと環境が壊れてしまう可能性あり

2.2 Pythonの基礎(配点3/5)

コーディング規約

IPython

  • ?:オブジェクトのうしろにつけて説明表示
  • %:マジックコマンド
  • !:シェルコマンド実行

内包表記

ジェネレータ式

ファイル入出力

with open(filename, mode, encoding)
  • チュートリアル
  • mode
    • ファイルが読み出し専用なら 'r'
    • 書き込み専用 (同名の既存のファイルがあれば消去されます) なら 'w'
    • 'a' はファイルを追記用に開きます。ファイルに書き込まれた内容は自動的にファイルの終端に追加されます。
    • 'r+' はファイルを読み書き両用に開きます。
    • mode 引数は省略可能で、省略された場合には 'r' であると仮定します。

文字列操作

str.upper()
str.lower()
str.title()
str.split(',')
str.endswith(('a')) # True,false
str.isdigit() # True,false
str.join('abc'))

標準ライブラリ

2.3 JupyterNotebook(配点1/5)

  • 対話型のプログラム実行環境
  • 実行
jupyter notebook
  • %timeit:1行のプログラムに対する処理時間計測
  • %%timeit:セル全体に対する処理時間計測
  • pandocとLaTeXをインストールすればPDF形式でもダウンロード可
  • NotebookファイルはJSON形式で記述されている

Chapter3(配点6/40)

3.1 数式を読むための基礎知識(配点1/6)

ギリシャ文字

集合

  • 和集合
  • 積集合

定数

関数

三角関数

双曲線関数

3.2 線形代数(配点2/6)

線形代数

行列

3.3 基礎解析(配点1/6)

微分積分

3.4 確率と統計(配点2/6)

代表値

  • 最小値(minimum)
  • 最大値(maximum)
  • 平均値(mean) ※not average
  • 中央値(median)
  • 最頻値(mode)
    • 分位数
    • 四分位数
  • 分散
  • 標準偏差
  • 度数分布表
    • 階級

データの可視化

  • ヒストグラム
  • 箱ひげ図(box plot)
    • IQR(第3四分位数-第1四分位数)
    • 外れ値
  • 散布図

データの関係性

確率

  • 全事象
  • 条件付き確率
  • 確率変数
  • 確率分布
  • 期待値
  • 分散
  • 確率質量関数:離散的な確率変数
    • 離散一様分布
  • 確率密度関数:連続的な確率変数

Chapter4(配点27/40)

4.1 NumPy(配点6/27)

  • 配列、行列計算が高速
  • ndarray:配列用の型
  • matrix:行列用の型
  • 専用の数値型がある ex.int16, float32

ndarrayの操作

array.shape
array.reshape((行数, 列数))
array.dtype
array.astype(NumPy.型)
array.ravel()   #行列の1次元変換、Shallow Copy
array.flatten() #行列の1次元変換、Deep Copy

NumPy関数

# 数列生成
arange(...)

# 同じ要素の数列
zeros(size)
ones(size)
eye(行列サイズ)
full(size, value) # 指定の値で全部埋める

# Not A number、データとしてはfloatに分類
nan

# =LINear SPACE(線形空間)
linspace(from, to, 分割size)

# 要素間の差分
diff()

concatenate([a, b], axis=1)

# 水平方向
hstack([a, b])
hsplit(a, [first-size])

# 垂直方向
vstack([a, b])
vsplit(a, [first-size])

# 転置行列
T

newaxis

meshgrid(m, n)

NumPy.randomモジュール

seed(...)

random((行, 列))
rand(行, 列)

randint(from, to)

uniform(from, to, size=(行, 列)) # 小数の乱数

randn(from, to) # 正規分布の乱数、平均0、分散1
normal(...) # 平均、標準偏差、sizeで正規分布乱数取得

NumPy機能

  • ユニバーサルファンクション:配列要素内のデータを一括変換
abs(ndarray)
sin(e)
cos(e)
log(e)
log10(e)
exp(e)
  • ブロードキャスト:配列を一括計算
mean(ndarray)
dot(a, b)
a @ b

判定・論理値

count_nonzero
sum
any
all
allclose # 浮動小数点誤差を無視したい場合に便利

4.2 pandas(配点7/27)

データの種類

  • Series 1次元データ

  • DataFrame 2次元データ 列ごとにデータ型が決まる

head
tail
index
columns
loc[:, :]  #インデックス名、カラム名指定
iloc[n, m] #インデックス番号、カラム番号指定

ファイル等の操作

  • CSVファイル
read_csv(filename, encoding="utf-8")
to_csv(filename)
read_excel(filename)
to_excel(filename)
  • HTMLファイル
read_html(url) # Tableタグを読み込む
  • PICKLEファイル
to_pickle(filename)
read_pickle(filename)

DataFrame

query("条件式")
dtypes
apply(pd.to_datetime)
astype(type)
set_index(column)
sort_values(by="column", ascending=False)
drop(column, axis=1)
get_dummies(DataFrame, prefix="any")

時系列データ

pandas
 .date_range(start="...", end="...")
 .date_range(start="...", periods="...")
 .date_range(start="...", end="...", freq="...")

df.groupby(pd.Grouper(freq='M')).mean() #月平均

df.resample('M').mean() #月平均

Grouper freq

欠損値処理

欠損値=nan

dropna() #欠損値の行削除
fillna(0)
fillna(method='ffill')
fillna(df.mean()) #平均値
fillna(df.median()) #中央値
fillna(df.mode().iloc[0, :]) #最頻値

fillna

method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None Method to use for filling holes in reindexed Series pad / ffill: propagate last valid observation forward to next valid backfill / bfill: use next valid observation to fill gap.

データ連結

pd.concat([df1, df2], axis=1, sort=True)

別次元を連結するとNaNで埋められる

統計データ

max()
min()
mode()
mean()
median()
std()       # 標準偏差
std(ddof=0) # 母集団の標準偏差の推定量

describe()  # 要約表示(count, mean, std, min, 25%, 50%, 75%, max)

corr()      # 相関係数

scatter_matrix(df)

データ変換

df.values

4.3 Matplotlib(配点6/27)

スタイル

メソッド

plt.title(...)  # MATLAB

plt.subplots()  # オブジェクト
as.plot(...)
ax.set_title(...)
ax.set_xlabel(...)
ax.set_ylabel(...)
ax.legend(loc='best')
fig.suptitle(...)

plt.show()

fig.savefig(filename)  # png, pdf, ps, eps, svg

グラフの種類

  • plot:折れ線グラフ
  • bar:棒グラフ
    • tick_label=labels
    • barh:水平方向
  • scatter:散布図
    • marker='v'
  • hist:ヒストグラフ
    • bins:棒の数
    • orientation:グラフの方向指定
    • stacked:積み上げ
  • boxplot:箱ひげ図
    • vert:グラフの方向指定
  • pie:円グラフ
    • ax.axis('equal')
    • startanble:開始位置(角度)
    • counterclock:回転方向
    • shadow:影付き
    • autopct:値表示
    • explode

4.4 scikit-learn(配点8/27)

前処理

  • 欠損値の除去
    • df.isnull() → dropna()
  • 欠損値の補完
    • Imputer(strategy, axis)
    • strategy:mean, median, most_frequent
  • カテゴリ変数のエンコーディング
  • One-hotエンコーディング
    • ダミー変数化する
    • OneHotEncoder(categorical_features)
    • 疎行列(scipy.spars)をtoarray()でNumpyに変換する必要あり
  • 分散正規化
    • 平均0、標準偏差1に正規化する
    • StandardScaler()
  • 最小最大正規化
    • 最小値が0、最大値1に正規化する
    • MinMaxScaler()

分類

  • テストデータセットへの分割
    • train_test_split(X, y, test_size)
  • 汎化能力 : 未知のデータに対する対応能力
  • 交差検証

サポートベクターマシンSupport Vector Machine, SVM

  • 線形分離できる/できない 直線や平面で分離できる/できない
  • カーネル データ間の近さを定量化する、高次元の空間でのデータ間の内積を計算する関数に相当
  • 決定境界、サポートベクタ、マージン
  • SVC(kernel, C)
    • kernel:サポートベクタマシンのカーネル、linear, rbf(radial basis function、動径基底関数)
    • C:マージンの広さ、値が大きいほどマージンは狭い
  • 分類結果は、極端に絶対値の大きな特徴量に影響を受けやすいため、正規化した方がよい

決定木(decision tree)

  • ノード、エッジ、子ノード、親ノード、根ノード(root node)、葉ノード(leaf node)

  • メリット データのスケールを事前に揃えておく必要がない。 分析結果の説明が容易である。

  • 情報利得 データを分割することでどれだけ得するか 親ノードでの不純度 - 小ノードでの不純度

  • 不純度 どれだけきれいにデータを分けられるか 指標:ジニ不純度(default)、エントロピー、分類誤差

  • DecisionTreeClassifier

  • pydotplusライブラリで可視化可能、GraphVizを使用(要インストール)

ランダムフォレスト(random forest)

  • 複数の決定木から予測結果を決定する。

  • バギング+決定木により、過学習しやすいという弱点を補完。

  • ブートストラップデータ ランダムに選択されたサンプルと特徴量のデータ

  • アンサンブル学習 複数の学習器を用いた学習方法

  • RandomForestClassifier(n_estimators)

    • n_estimators:決定木の個数

回帰

  • 目的変数を説明変数・特徴量で説明するタスク
  • 線形回帰:1次式
  • 単回帰:説明変数がひとつ
  • 重回帰:説明変数が複数
  • LinearRegression

次元削減

  • 主成分分析(Principal Component Analysis:PCA)
  • PCA(n_components)
    • n_components:新たな変数(次元削減後)の数

モデルの評価

  • 定量化指標

    • 適合率(precision)
    • 再現率(recall)
    • F値(F-Value
    • 正解率(accuracy)
    • classification_report(ラベル, 予測)
  • 混同行列 true/false(正しいか) + positive/negative(予測結果が)

- 実績:正例 実績:負例
予測:正例 tp fp
予測:負例 fn tn
  • 交差検証(Cross Validation)

    • cross_val_score(model, x, y, cv, scoring)
  • ROC曲線(Receiver Operating Characteristic)

  • AUC(Area Under the Curve)

    • roc_auc_score

ハイパーパラメータの最適化

  • グリッドサーチ(grid search) ハイパーパラメータの候補を指定して 予測結果がよいものを選択する 交差検証との組合せでよく用いられる
    • GridSearchCV(model, param_grid:パラメータ候補, cv:交差検証分割数)
    • best_params_:最適なパラメータの確認
    • best_estimator_ :最適なモデルの確認
  • ランダムサーチ(random search)
    • RandomizedSearchCV

クラスタリング

  • k-means
    • KMeans
パラメータ 説明
n_clusters クラスタ
init 初期値の与え方
n_init 実行回数
max_iter 反復最大回数
tol 許容誤差
random_state 乱数シード値
  • 階層的クラスタ
    • 凝集型:小さなクラスタを作ってから、地道にコツコツとまとめていく
    • cluster.AgglomerativeClustering
    • 分割型:大きな塊をクラスタに分解していく

E資格 2021#1 受験振り返り

対象者

  • これからE資格に取り組もうとしている方
  • コース受講の感触を知りたい方
  • 試験対策方法を知りたい方

E資格振り返り

  • E資格については公式サイト(JDLA)をご覧ください。
  • 実際に受講・受験するまでわからなかったことを含めて、一問一答形式で書いていきます。

なぜ受験したの?

  • AIについては数年前、とある研究会への参加をきっかけに興味を持ちました。
  • 普段の仕事でAIやデータ分析、Python等に関わっているわけではありません。
  • 2019年G検定に合格し、E資格にもトライしたいと思っていましたが、費用が高額なため控えていました。
  • ところが、ひょんなことから費用が捻出できることになったため、2020年12月にチャレンジを決めました。

いつ受験したの?

  • 2021#1 (2021年2月19日・20日)です。

試験時間は足りた?見直し時間はある?

  • 試験は120分で103問の出題でした。(回によって多少前後すると思います)
  • 私の場合は、全問回答+「後で見直す」とした問題の見直しが終わった時点で30分以上余っていました。
  • 計算問題はありますが、知識問題が大半なのでこれが順調に回答できれば時間は十分あると言えます。
    • ちなみに、計算問題等で私がメモ用紙を使用したのは4~5問程度でした。(余白が足りないということはなかった)
  • 余った時間で全問見直しをしましたが、それでもまだ10分弱ほど残っていました。(そのまま終了しました)

なぜ試験日が2日間あるの?

  • 試験はCBT(PCを使ってポチポチと解答する)です。
  • 受験者が任意の会場・時間を選択できます。

受験会場はどこ?

日や時間によって試験内容は同じなの?

  • わかりません。
  • 試験内容は規約により口外できないため、他の受験者の試験内容を確認することができません。
    ※一般的にCBT試験はいつでも・何度でも受験できるため、出題にはランダム性があります。

受講した認定プログラムは?費用は?

  • Zero to one 社のコースを使いました。
  • コース詳細や価格はHPで確認してください。
    ※最近は価格競争による価格改定があるので、まとめサイトの情報ではなく認定プログラムのページで確認しましょう。

なぜそのプログラムを選択した?

  • オンデマンドでいつでも受講できること。
    → 仕事があるため。この条件だけである程度絞られる。
  • Python線形代数はあまりなくてもよいが、機械学習は基礎から学べる事。
    ディープラーニングだけのプログラムもあるので、コンテンツの範囲には注意。
     基礎や機械学習を追加すると高額になるものも。
  • 価格ができるだけ安いこと。

ここまでで数コースに絞られます。さらに・・・

  • 松尾豊教授の監修、アンケートの公開、法人導入実績あり。
  • 富士通の資格認定でZero to one社がお薦めとされていたこと。

これらを決め手として、「信頼性が高そうだ」と判断しました。

受講者のレベルは?

おおざっぱですが、数学は大学初等レベル、Pythonは基礎レベル(チュートリアルひととおりやった程度)です。

プログラムの内容はどうだった?

  • 全体感をざっくり言うと「良くも、悪くも」でした。
  • コンテンツの範囲は十分でした。(数学・Pythonの基礎、機械学習ディープラーニング
  • ストレートな表現は避けますが、「かなりストレスのたまるコンテンツ」も中にはありました。
    • しかし、終わってから考えてみると、そもそも扱っている内容が広く難しいものなので、すべてを完璧にコンテンツに含めることは不可能だと思います。
    • 試験の性質上、自ら学ぶ姿勢が重要になるため、不明瞭なところがあればWebや原著論文などをあたればよいわけです。
  • 注意点
    • 「ペーパー(PDF含)で学習したい方」「資料を手元に残しておきたい方」には不向きです。(私は特にこれがアンマッチでした)
      → プログラムはコンテンツも重要ですが、どのような学び方ができるか(オンデマンドなのか、講義スタイルで質問しまくるのか、など)も重要なので、注意深く確認してください。(決して安い受講料ではありませんから)

どれくらいの期間・時間、勉強したの?

  • 学習期間:2か月(受験を決めたのが遅かったので)
  • 学習時間:計200時間(を超えるくらい)
    • コース受講で約100時間、その後の追加学習で100時間超。
    • 数学もPythonもやってきていない方は、少なくとも+100時間(あるいはそれ以上)を覚悟した方がよいです。
  • 仕事をしながら2か月で200時間超を確保するのはかなりしんどかったです。
  • 結果的に学習時間が不足していたとも感じます。
  • 前提知識によりますが、余裕をもって4~6か月かけて学習された方がよいです。

試験対策は認定プログラムだけで十分?

  • 不十分です。追加で徹底攻略ディープラーニングE資格エンジニア問題集(いわゆる、黒本)が必須だと思います。
  • 認定プログラムはシラバスの内容を概ね網羅してはいますが、説明がわかりづらい部分や、簡素化されている部分がどうしても出てきます。(合う/合わないもあるでしょう)
    • こうした部分を黒本で知識補間できます。
  • 知識確認には問題形式が有効ですが、私が受講した認定プログラムでは、その範囲や分量が不十分でした。(私にとって、ですが)
  • 黒本の著者はE資格を繰り返し受験されており、E資格の問題がよりストレートに表現されていると感じますので、試験対策としてはかなり有効だと思います。
    ※今後、シラバスや設問の改定によっていつまで黒本が通用するかはわかりませんが、おそらく黒本も改定されていくだろうと思います。

E資格に取り組んでよかった?

  • 「よかった」の一択です。
  • G検定ではキーワードと概念を覚えていきますが、「結局何を言っているのかよくわからない」というものが多くあります。
  • E資格ではこうした部分に数式レベルで突っ込んでいくため、正しく・より深く理解することができます。
  • また、E資格の学習を通じて機械学習ディープラーニングの学び方(勘所、何を見ればよいか等)が身に付いたように感じます。

初学者でもチャレンジできる?

  • できます。(できました。合否はさておき。)
  • 仕事で扱っていない方は相当苦労するとは思いますが、興味があるならばチャレンジ一択です。
  • E資格を経ることで、その後の学びの質が変わると思います。
  • 問題は費用だけですね。。。