新卒1年目の技術に関する備忘録

自主学習で困ったこと、学んだことをまとめています

2018-01-01から1年間の記事一覧

評価基準とスコア

2クラス分類を例に挙げる。 片方のクラスだけ極端に多い場合、単純に精度が高いから良いモデルとは決めきれない。 極端に多いクラスの方だけを予測してしまえば、高い精度を保てるからである。 混同行列 精度 = TP + TN / TP + TN + FP + FN で表される。…

自動特徴量選択

モデルの汎化性能を向上させるために、最も有用な特徴量だけを残し、残りを捨てて特徴量を減らす必要がある。 良い特徴量を知るための基本戦略3つ。 ・単変量統計 ・モデルベース選択 ・反復選択 単変量統計 個々の特徴量とターゲットの間に統計的に顕著な関…

単変量非線型変換

log, sin, cosなどの数学関数を用いることでモデルの精度をあげることができる。 下図のように、値の小さいものが多く、値の大きいものが少ないデータについて考える。 まずはそのままのデータで予測をしてみる。 モデルはリッジ回帰を用いる。 R^2のスコア…

特徴量のビニングと離散化

線形回帰モデルを柔軟にする方法として、ビニングがある。 線形回帰モデルでは特徴量が1つである場合、予測が直線になってしまうため特徴量を増やす方法としてビニングが使われる。 ビニングの方法 特徴量の入力レンジを固定数のビンに分割する。 numpyのlin…

クラスタリングの評価

正解データを用いるクラスタリングの評価 調整ランド指数(adjusted rand index: ARI)、正規化相互情報量(normalized mutual information)がある。 正解データを用いないクラスタリングの評価 シルエット係数 シルエットスコアはクラスタのコンパクトさを計算…

DBSCAN

DBSCAN(density-based spatial clustering of applications with noise) 密度に基づくノイズあり空間クラスタリング 利点 ・クラスタ数を先験的に与える必要がない。 ・どのクラスタにも属さない点を判別できる。 高密度領域(混んでいる領域)を見つける。 …

凝集型クラスタリング

個々のデータポイントをそれぞれ個別のクラスタとして開始し、最も似た2つのクラスタをくっつけていく。 指定したクラスタの数になるまでそれを繰り返す。 連結度 ward 併合した時に、クラスタ内の分散の増分が最小になるように2つのクラスタを選択する。こ…

ベクトル量子化、成分分解としてのk-means

k-meansはクラスタセンタで個々のデータポイントを表現する。 個々のデータポイントを、クラスタセンタとして与えられる単一の成分で表現していると考えることができ、k-meansを成分分解としてみる考え方を、ベクトル量子化と呼ぶ。

クラスタリングとクラス分類

クラスタリングとクラス分類は、両方ともラベル付けをするという意味で、ある意味似ているが、クラスタリングには真のラベル(テストデータ)がない点において異なる。

k-meansクラスタリング

データのある領域を代表するようなクラスタ重心を見つけようとする。 個々のデータポイントを最寄りのクラスタ重心に割り当てる。 個々のクラスタ重心をその点に割り当てられたデータポイントの平均に設定する。 データポイントの割り当てが変化しなくなった…

非負値行列因子分解(NMF)

Non-negative matrix factorization 有用な特徴量を抽出することを目的とする教師なし学習手法の1つである。 アルゴリズムの動作はPCAと似ていて、次元削減に用いることが出来る。 PCAでは、個々の成分はデータの分散を可能な限り説明する、互いに直行するも…

PCA基礎

PCAのwhitenオプション 主成分が同じスケールになるように変換する。 PCA後にStandardScalerをかけるのと同じ。

主成分分析

PCAを用いたデータ変換。 (左上)最も分散が大きい方向を第一成分(Component 1)、それに直行する方向で、最も情報をもっている方向を探す。 このようにして見つけていく方向を主成分という。 下図 (左から右に)もとのデータ、変換後のデータ、変換して第…

様々な前処理

データの前処理として、主にStandardScaler、RobustScaler、MinMaxScaler、Normalizerの変換の4つがある。 StandardScaler 平均が0、分散が1になるようにする(z変換)。 ※特徴量の最大値や最小値が、ある範囲に入ることを保証するものではない。 RobustScal…

SVM(サポートベクタマシン)

SVMのパラメータ gammaパラメータはガウシアンカーネルの幅を調整する gammaパラメータを小さくするとガウシアンカーネルの直径が大きくなり、多くの点を近いと判断するようになる。 大きくすると複雑になる。 Cパラメータは正則化パラメータである Cを大き…

ニューラルネットワークのモデル基礎

隠れ層が1つでユニットが10の時は10の線分から構成される。 MLPClassifierのパラメータhidden_layerで隠れ層のユニット数を指定し、alpha値でL2正則化を制御することが出来る。 alphaを大きくすると正則化が強くなり、多くが重み0に近づく。 adamはスケール…

勾配ブースティング回帰木(勾配ブースティングマシン)

勾配ブースティングでは一つ目の決定木の誤りを、次の決定木で修正するようにして決定木を作っていく。 乱数性はないが、強力な事前枝切りが用いられる。 浅い決定木(弱学習機)を多数組み合わせるから、メモリが小さくなり予測も速くなる。 パラメータの影…

ランダムフォレスト

n_estimatorsで決定木の数を、n_jobsでCPUのコア数を指定することが出来る。 ランダムフォレストは乱数のシード(random_state)を変更すると、構築されるモデルが大きく変わる可能性がある。 決定木の数が増えると、シードの選択の影響を受けにくくなる。 max…

決定木基礎

決定木の事前枝切り、枝切り。 決定木では枝切りをしないと過剰適合が起きやすくなる。 sckit-learnでは事前枝切りしか実装がされていない。 sklearnのDecisionTreeClassifierではmax_depthを指定することで決定木の深さを決めることが出来る。 max_depthを4…

大規模データの線形回帰

サンプル点が10万、100万点のように非常に大きい場合も線形モデルは高速である。 このようにサンプル数が多い場合は、solver = 'sag'を指定すると高速化が見込める。 SGDClassifierクラスとSGDRegressorクラスを使う方法もある。 SGDは大規模なデータに適し…

ロジスティック回帰の基礎

LogisticRegressionではパラメータCを大きくすると、適合度を上げようとし、小さくすると係数を0に近づけようとする(正則化)。

回帰のモデル

LinearRegressionでの、学習セットに対するテストセットの精度が低い場合 例 train prediction : 0.92 test prediction : 0.63 モデルの過学習であるため、正則化を行う必要がある。 正則化とはざっくり言うと、係数を0に近づけることで学習精度を低くする代…

pandasのデータフレームの内容を条件分岐で置換する方法

df.columns = df.columns.where(~(df.columns < 1), 0) ※1以下のデータを0に置換する 場合

Jupyterで機械学習をしていたらthe kernel appears to have died. it will restart automaticallyが表示された

the kernel appears to have died. it will restart automatically メモリの関係でこうなるらしい。 特にmatplolibの画像描画でメモリを食うため、これが出たら、matplotlibのところをコメントアウトすると解決する場合が多い。

sklearnのcross_validationの変更点

sklearn.cross_validation→sklearn.model_selection

map()の使い方②

>>> x = pd.Series([1,2,3], index=['one', 'two', 'three']) >>> x one 1 two 2 three 3 dtype: int64 >>> z = {1: 'A', 2: 'B', 3: 'C'} >>> x.map(z) one A two B three C 公式ドキュメントから map()で引数に辞書型をとると、そのキーの紐づく値に変わる…

map()の使い方①

①map(function, functionに入れたいもの) 例 array = np.arange(10) array array array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) list(map(lambda x: x*x, array [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]​

jupyter notebookの入力補完

入力補完はnbextentionsをインストールすれば良い。 anacondaの場合 conda install -y -c conda-forge jupyter_contrib_nbextensions というコードをターミナルで打ち込む。 その後、jupyter notebookのHOMEにあるNbextensionsからHinterlandを有効にする。

drop_duplicatesの引数でエラーが出た

pandasのdrop_duplicatesの第二引数でtake_lastを使ったらエラーが出た。 http://kharuka2016.hatenablog.com/entry/2017/09/27/094525 この記事によるとtake_lastからkeep='last'に変更されていた。 Udemyの動画見て学習しているが結構使えなくなっているメ…

pandasのread_csvでエラーが出る

pandasでpd.read_csvとやるとInitializing from file failedとエラーが出てしまった。 ↓これで解決出来た。 Python3.6のpandasで「Initializing from file failed」が起きた場合の対策 | 自調自考の旅 具体的な解決策としては、pd.read_csv("CSV名.csv", eng…