A Day in the Life

2021年2月26日

雨が降る予報だったけど一日どんより曇り空。花粉症患者的には雨降ってほしい。


SIGMAの新レンズ、28-70mm F2.8 DG DN | Contemporaryが発表される。以前スペック的には似たようなタムロンの28-75mm F/2.8(A036)を使っていたのだけど、画質はさておき、外観の安っぽさと各種リングの手になじまなさがしっくりと来ず、もう買うことは無いのだろうなぁと思っていたところに、スペック的には似ているレンズがシグマからも。写真で見る限り、プラスチックとはいえ外観が良い感じで、実際に使ってみたい。軽い(Lマウントは470g)のが良いのだよなぁ。後発で同価格帯だから、さすがにタムロン並の画質はあるのだろうし。

最近カメラ・レンズのニュースをやたら見かけると思ったら、カメラ最大のイベントCP+2021のオンライン開催が行われているのかぁ。本来なら家からすぐのパシフィコ横浜で開かれており、今まで一度も行ったことがなかったので行きたかった。昨年は周りのイベントが様子を見る中、早々にリアルイベントをやらないと決めた(国内の大きなイベントでは一番最初だったかも)CP+は偉い。


久しぶりの韓国ドラマ、キム秘書は一体、なぜ?の1,2話を見る。てっきり「なぜ?」の答えはドラマの最後に明かされるのかと思いきや、普通に1話で明かされて、2話からはラブコメとなるのだけど、何も考えず力を抜いて見れるので、これはこれで面白く見れる。


昨晩から調子が悪く、朝はだいぶ体調が悪くて、今日は一日寝て過ごそう。という感じだったのだが、午後から活動できる程度には良くなってきたので本を読みすすめる。


機械学習学習日記 - 25日目

scikit-learnとTensorFlowによる実践機械学習を引き続き。

3章 分類では二項分類・多クラス分類・交差検証・混合行列と性能指標(ROC/AUC)などなど。ちゃんとしたモデルの説明というよりはこんなふうやれるよ、細かいのは後の章で、というスタンスで進めている。

データベースはMNISTの手書き文字(7万個の28x28画像)を使ってるので、実データに比べたら大した事ないにせよそこそこ計算機コストがかかる。グリッドサーチの説明では実行するとハードウェアによって16時間かかったから注意、みたいなことも書いてあって、たしかに12コア(Ryzen9 3900)で n_jobs=-1 環境(コア全部使う)で1時間10分かかったのでそれなりだ。Pythonではじめる機械学習のほうはMNISTの縮小版で手書き認識をやっていたので、初心者への説明する時の手を動かしてやるデータとしては、そちらのほうが進めやすいなぁ。

この本は演習問題もあって、コードを読んでいても Python に慣れてない事もあって勉強になる。3章の演習では、画像を縦横1pxずつずらしたものをデータセットにし、データ量を5倍にしたものを学習させ、スコアが0.5%上がったことを確認させたり(訓練セットの拡張)。

他の演習問題では、こないだやったKaggleのタイタニック問題を解く。自分でやったときは pandas のDataFrameをこねくり回して居たけど、こちらの本の解説ではうまく scikit-learn のインターフェイスとパイプラインに合わせて実装する方法を解説している。例えばカテゴリ変数なら、以下のように最頻値で欠損値を穴埋めするクラスを定義して、それをパイプラインで処理していく。なるほど~。(なお、書籍のコードは大半をしめなければ自由に使って良いとのこと)


class DataFrameSelector(BaseEstimator, TransformerMixin):

    def __init__(self, attribute_names):

        self.attribute_names = attribute_names

    def fit(self, X, y=None):

        return self

    def transform(self, X):

        return X[self.attribute_names]



# Inspired from stackoverflow.com/questions/25239958

class MostFrequentImputer(BaseEstimator, TransformerMixin):

    def fit(self, X, y=None):

        self.most_frequent_ = pd.Series([X[c].value_counts().index[0] for c in X],

                                        index=X.columns)

        return self

    def transform(self, X, y=None):

        return X.fillna(self.most_frequent_)



cat_pipeline = Pipeline([

        ("select_cat", DataFrameSelector(["Pclass", "Sex", "Embarked"])),

        ("imputer", MostFrequentImputer()),

        ("cat_encoder", OneHotEncoder(sparse=False)),

    ])

続いてスパム分類器を作る演習。データセットからemailをパース、本文、ヘッダを見る、メールbodyからプレーンテキストへの変換、単語カウントとstemming(表記ゆれ)変換、スパース行列のcsr_matrixへの格納、Estimator化、などなど一通り。

4章 モデルの訓練では、線形回帰・勾配降下法・線形モデル正規化(Ridge/Lasso/ElasticNet)、ロジスティック回帰・ソフトマックス回帰など。数式が結構手出てきて、シンプルなのは python コードで実装に落としてあるものもあり理解しやすいのだけど、難しいのはなるほどわからん、という感じに…。

5章 サポートベクトルマシン(SVM)。線形SVMの説明は、サポートベクトルが解りやすくプロットされてる図ですんなりと理解できた。マージン境界とパラメータもわかりやすい。続いてカーネルトリックを用いたいわゆるSVMの話。カーネルトリックを使うと、特徴量を追加せずに多項式特徴量を追加したかのような結果が得られる。その代表的なカーネル各種の紹介と説明。

5.4 からカーネルトリックの理論なのだけど、今の知識じゃ全然分からずさらっと読み流す。

5章の演習問題で、MNISTデータセットをSVMで訓練する項目があるのだけど、6万のデータセット中1000個のパラメータで試していて、それぐらい減らしてデータセットによっては良いのか。またグリッドサーチでは RandomizedSearchCV にパラメータに scipy.stats の統計関数、 reciprocal, uniform の離散値の関数を使っていて、こんな書き方できるのかー。

撮影機材α7C/po3-3m 50mm f2

似ている画像がある記事

2021年3月15日電動バイクでアンコールワットを走る / 世界一周29日目2021年3月15日2021年3月29日南湖公園の桜・小峰城・あずま食堂 / 2022年4月12日Potironのコルドンブルー・那珂川河畔公園の桜・高久愛宕山公園 / 2022年4月11日2021年4月20日アンコールワットの遺跡群・その2 / 世界一周28日目

同じ日付の日記

web3ワイワイ / 2022年2月26日
y氏がわざわざ遊びに来てくれ、j氏と一緒にweb3についてあれこれ話す。web3のことは本一冊読んだ程度の知識だったので、あれやこれやを話すうちに徐々に理解が進んできて楽しいひと時。ランチや温泉や散歩なども合間に行い、良い時間だったなぁ。y氏からおすすめと教えてもらったJoi I...
y氏がわざわざ遊びに来てくれ、j氏と一緒にweb3についてあれこれ話す。web3のことは本一冊読んだ程度の知識だったので、あれやこれやを話す...
🇪🇬軽い風邪を引く / 世界一周150日目
昨夕ぐらいから、ちょっと風邪っぽいかも、と思っていたのだけど、微熱が出て案の定軽い風邪を引いたようだ。東アジア人が風邪で街中を歩いてると嫌な目で見られること間違いなしなので、早めに治すためもほぼ1日ホテルでゆっくりとする。風邪薬が切れていたので、近くの薬局へ買いに行くと、薬局のお...
昨夕ぐらいから、ちょっと風邪っぽいかも、と思っていたのだけど、微熱が出て案の定軽い風邪を引いたようだ。東アジア人が風邪で街中を歩いてると嫌な...