エラーメッセージ;visual studio code '$ file ' cannot be resolved. please open an editor

トラブル

Visual studio codeでjupyterを動かしたあとDebugを走らせようとすると,

visual studio code '$ file ' cannot be resolved. please open an editor

というダイアログが立ち上がった.
f:id:shu10038:20190812174859j:plain

対処法

ダイアログにある「Opne launch.json」を開けたてから再びDebugしたら,何故か正常に動いた

エラーメッセージ「OverflowError: Exceeded cell block limit (set 'agg.path.chunksize' rcparam)」の対処

久々の更新

matplotlibを使ってみたらこんなメッセージが出た

OverflowError: Exceeded cell block limit (set 'agg.path.chunksize' rcparam)

該当するところは描画のところ

plt.plot([3万行くらいのリスト],[3万行くらいのリスト])

サイズのところが悪さをしていたらしい

plt.figure(figsize=(10, 6))
plt.subplot(2, 1, 1)

コイツらをコメント化したら治った

標準化と中心化

Pythonで標準化とか中心化はどうやってやるんだろうという話です.

結論だけ書きます.(そのうち合間を見て加筆します)

このページではこういうデータを使います
f:id:shu10038:20181006173233j:plain

標準化

from scipy import stats
x = df.iloc[:, 2:6].apply(stats.zscore, axis=0)
x.head()

f:id:shu10038:20181006173231j:plain

標準化されているかを調べます
f:id:shu10038:20181006173229j:plain
平均ほぼ0,分散(標準偏差)ほぼ1

中心化

y = df.iloc[:, 1].apply(lambda v:v-df.iloc[:, 0].mean() ).astype(float)
y.head()

バイアス-バリアンス分解の導出を真面目にやる

どうもです.

只今,下記の書籍にを用いて勉強中です.

応用をめざす 数理統計学 (統計解析スタンダード)

応用をめざす 数理統計学 (統計解析スタンダード)

P118のあたりに推定の偏りの話や,不偏推定量の事が述べられています.そして推定量の真の母数と推定量の二乗誤差の期待値を計算する所では次の式が書いてありました.

f:id:shu10038:20180920215318j:plain
さぁ,なんということでしょう~,式の行間が開きすぎてよくわかりません.他の書籍で調べてもこんな感じで端折ってありますし,ネットで調べても「期待値の計算すれば上手いこと消えてほしい項が0になってくれます」みたいな感じで,きちんとと書いている記事が直ぐには見当たりませんでした.
なので,折角なので勉強がてらに式の展開をしてみます

展開

二乗誤差を計算すると

f:id:shu10038:20180920215319j:plain
ここで,第三項について, \theta  E\left(  \hat {  \theta } _{n} \right)  は定数であることを考慮すると,
f:id:shu10038:20180920215320j:plain
よって,元の式は
f:id:shu10038:20180920220322j:plain

Windows環境下でPython版のglmnetを使うとどうなるか?

夏のある日のこと,
私はLasso回帰を用いてあるデータを分析しようとしていた.

glmnetを呼び出して実行したところ,

x input must be a scipy float64 ndarray

とエラーメッセージが帰ってきた.

あれ?っと思ったけど,その日に扱っていたのは整数値だったことを思い出した.
しゃぁ無いから浮動小数点数にキャストしてみたんだ.
これで間違いは無いはず.
スクリプトを実行してみると・・・

raise ValueError('loadGlmlib does not currently work for windows')
ValueError: loadGlmlib does not currently work for windows

なん・・・だと・・・・
これwindows環境では動かんのかい!!
諦めて,教えてもらったAzureNotebookを使うかな.

StatsModelsとscikit-learnのElastic Net(Lasso回帰)を比較してみた

 最近スパース推定の勉強会に参加しております.使っているテキストはこちら.

スパース推定法による統計モデリング (統計学One Point)

スパース推定法による統計モデリング (統計学One Point)

この本の第2章のElastic Netについて勉強がてらにプログラムを書いてみて,振る舞いを観察してみました.

 今回使うデータはこちら.リンク先のヘッダの「Earn」が観測日の売上.「MaxTemp」が観測日の最高気温で「MinTemp」が最低気温.「Humi」は観測日の湿度.「Wind」は風の強さ.「Sun」は日照時間です.この「Earn」売上に直結する項目は何かを分析することが目的です.
ちなみに,このデータは昔お世話になったアイスクリーム屋さん・ハンバーガ屋さんの統計をイメージして作成したものです.なので実際の現象とは異なりますのであしからず.

各項目の相関係数を出してみるとこんな感じです.「Wind」がわざとらしいほどに無相関ですね.
f:id:shu10038:20180713095238p:plain
各項目の関係をグラフにするとこんな感じ.
f:id:shu10038:20180712223511j:plain
明らかに「Wind」がやる気がない数字が入ってますね.(まぁ,だってそういう風に作ったんだもん)

StatsModelsのエラスティックネットを用いてPythonスクリプトを書いてみた

 統計を用いた分析をする時に「StatsModels」を使うか「scikit-learn」を使うか悩ましかったりします.StatsModelsはPandasのDataFrameを直接使うことができるので,私はどちらかというとStatsModelsを使うことが多いですね.現時点ではscikit-learnはDataFrameを受け付けないですが,そのうち変更があったらどうなるか分かりません.といってもscikit-learn昔書いたこちらの記事を参照にDataFrameからListに変換してあげればいいだけなんですけどね.

StatsModelsのエラスティックネットのドキュメントはこちらこちら

さて,下記のように書いてみました.

この書籍では罰則項を増加させたときの回帰係数を描画した解パス図というのを紹介していました.これに習って同じものを描いてみるとこんな感じ.
f:id:shu10038:20180714090330j:plain
あれ?なんか変だぞ??この場合は一番売上に一番関係なさそうな「Wind」が先に消えるんじゃないの??
なんか変なのでscikit-learnではどういう振る舞いを見せるのかやってみました.

scikit-learnによるエラスティックネット

scikit-learnを使ったエラスティックネットはネット上にサンプルコードが山ほどあるのでここでは特に記載しません.Gitには上げておいたので,興味がある方は下記を参照ください.

さて,同じように解パス図を書くとこんな感じ.
f:id:shu10038:20180714090331p:plain

あれ?StatsModelsとsklearnで結果が違う・・・・
そんな馬鹿な,,という感じですが原因不明です.これでは余りにも内容がない記事になってしまいますので,あとで加筆します.


ではそんな感じで.ではでは.

データフレームの各行の差を計算してグラフ化する:Pandas

やりたいことしては,タイトル通り『データフレームの各行の差を計算してグラフ化する』ことです.Pandasのデータフレームを用いて各列の時間差を計算してグラフに出力するということをやります.

今回はTimedelta型を使っているのですが,データフレームの差を計算して描画しようとすると「'Timedelta' object has no attribute 'plot'」というエラーメッセージ出てきます.無理やりint型になおして出力するとナノ秒になってしまうので,これを上手く工夫して出力しなくてはなりません.

ここからが本題

さて,こんなデータを使います.各駅の名前とそこを通過する時間が記載されているデータがあるとします.

//time.csv
hakata,10:00:05.156
yoshiduka,10:29:54.731
kadomatu,11:03:44.195
katuragawa,11:38:32.395
tendou,12:09:21.151
iiduka,12:46:10.364
kokura,13:21:59.996

このとき前の駅から今の駅まで到着するのにかかった時間を計算してグラフに出力します.

Python3のコード

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab

# CSVデータの読み込み
df = pd.read_csv('data/time.csv', header=None, names=['sta', 'time'])

# 時間型に変換
df['time'] = df['time'].apply(lambda xx: pd.to_datetime(xx))

# 時間差の計算.各行の差を計算する
df_e =df['time'].diff(1).fillna(0)

# 描画
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(df['sta'], df_e)

# ナノ秒から変換
def toChange(y, i):
    h = int(y / 1000000000 / 3600)
    m = int(y / 1000000000 / 60)
    s = int(y / 1000000000 % 60)
    return '%(h)02d:%(m)02d:%(s)02d' % {'h': h, 'm': m, 's': s}

from matplotlib.ticker import FuncFormatter as ff

ax.yaxis.set_major_formatter(ff(toChange))
plt.grid()

plt.show()

結果

するとこんなふうに出力されます
f:id:shu10038:20180610204723j:plain