サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
AIトピックス 2023
www.st-hakky-blog.com
こんにちは。 久しぶりのブログ投稿になってしまったのですが、今日は「クエリの単体テストを書こうと思ったけど、壁が厚くてどうしようかなと思った話」を書きたいと思います。 はじめに言っておきますが、この記事は特に何か解決策があるわけでもなんでもなく、「ただ、クエリの単体テストを書こうとするとこんな問題にぶち当たって、それに対してこうしたらいいとは思ったけど、誰か最高のソリューションない?笑」って聞きたかったから書いただけの記事です笑*1 この記事のモチベ 最近、BigQueryを使ったデータ分析基盤とやらを開発しているのですが、「テスト書いてないとかお前それ @t_wada さんの前でも同じこと言えんの?」って言う状態になり、「これ真面目にやろうとするとどうなるんだ」って言うことで真面目に対峙してみました*2。 ここで言う「真面目に」と言うのは、「入り得る全パターンのデータに対する集計があって
こんにちは。 今仕事でメモリ使用量を最適化するような感じのタスクをやっていて、docker-composeのメモリ使用量を制限するやり方みたいなのを調べたのでまとめておきます*1。 docker-composeのversion3を使っているのですが、version2のやり方で行けるかなーと思っていたら、行けなかったので、ついでにまとめました。 docker Engine自体のメモリ docker自体のメモリが上限になるので、MAXがどこまで使用することができるのか確認する必要があります。 基本的には、何も設定しないと、dockerで制限されているメモリを使い切ることができます。 メモリ制限の方法 docker-composeのfileのバージョンによって、制限方法が異なるので、そこに注意が必要とのことです。 ここからは、それぞれの場合に応じてまとめていきます。 Compose file :
こんにちは。 自分でECSとか触って開発することになったので、そのやり方とかまとめておこうと思います。 ECSとは AWSのコンテナ管理のマネージドサービス。ぐだぐだ私が説明するよりも、ぶっちゃけ世の中に良き記事が出すぎて、改めて書く必要もなし。 AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service from Amazon Web Services Japan www.slideshare.net 最初は、言葉が多くて、面食らうんで、忘れやすい私のためにメモ。 用語 意味 Cluster Container Instanceの集合体。複数のサービスを管理する ECS Instance ECSが稼働するEC2インスタンス Service 複数のタスク定義と紐づけて、管理するもの Task Definition タスクに
こんにちは。 最近、仕事で自然言語処理関係のプロジェクトをやっているのですが、その関係でdoccanoというツールを触ってみることになったので、使い方とかをまとめておきます。 doccanoとは doccanoとは、オープンソースのテキストアノテーションツールです。 github.com 以下の三つのアノテーションタスクをすることができます。 Text Classification Sequence Labeling Sequence to Sequence demoサイトは以下から。 doccano.herokuapp.com RESTful APIなども搭載されているので、結果の取得をAPI経由で行うなどもすることができます。 doccanoをとりあえずローカルで立ち上げてみる doccanoをローカルでとりあえず試してみます。 pipでインストールして立ち上げる 以下のコマンドだけで
こんにちは。 今、とある事情でPandasのメモリ使用量の削減を仕事でしているのですが、その時に改めてPandasのメモリ使用量の削減方法を調べたので、まとめてみます。 メモリ使用量の確認 今回、タスクを実施するにあたってメモリ使用量がどのくらいかかっているのかを同時に調べたんですが、Pandasに限らず、メモリ使用量を確認する方法としては、memory_profilerが良きです。以下の記事で紹介していますので、参考にしていただければと思います。 www.st-hakky-blog.com ただ、このmemory_profilerは関数の中まで見に行ってメモリ使用量を見にいくわけではないので、関数内でピークを向かえるメモリ使用量などがわからない点に注意が必要です。 メモリ使用量の削減概要 Pandasでよくやる操作でメモリ使用量を削減する方法は、だいたい以下あたりじゃないかなと。 使わな
こんにちは。 今日は、推薦システムについて調べたのでそのことについてまとめます。 推薦システムとは 推薦システムとは、特定のユーザーに対して、アイテムへの嗜好を予測し、提示すべきアイテムを決定するシステムのことを指します。AmazonなどのECサイトで表示される「この商品を買った人はこれも買っています」みたいなのを思い浮かべるとわかりやすいと思います。 また、Konstanの定義によれば以下のようなものが紹介されていました。 Recommenders: Tools to help identify worthwhile stuff (推薦システム:どれに価値があるかを特定するのを助ける道具) 大規模なサービスになってくると、ユーザーが自分のほしい情報や商品がどこにあるかを特定することは、検索やカテゴリから情報を選ぶという手段だけでは非常に難しくなります。 そのため、ユーザーの趣味嗜好に
こんにちは。 今日は、loggingを複数ファイル・モジュール間で使う方法について調べたので、そのメモを書きます。ログの設定については下記に書いたので、今回は複数ファイル・モジュール間で使う方法についてだけ描きます。 st-hakky.hatenablog.com やり方 公式ドキュメントに書いてあります。 Logging クックブック — Python 3.6.5 ドキュメント 基本的に、 logging.getLogger('someLogger')のような感じでloggerを定義して、複数ファイルやモジュールで複数回同じように呼び出せば、同じ参照先を返すので、特に考える必要がありません。 具体的には、以下のような感じです。 main.py # coding:utf-8 from logging import getLogger, StreamHandler, DEBUG, Forma
こんにちは。 データドリブンな組織ってそもそもなんの意味があるのかをしっかりとまとめておこうと思い経った機会があったので、まとめてみます*1。 思い立ったきっかけ このところこのテーマについてよく考えるようになり、また必要だなと感じた背景として、最近データ分析系のProductに関わるようになったからです。 「自分が分析しないけど、分析をしてビジネス価値を出して欲しい」という立ち位置で諸々を考える必要があって、しかも彼らには昔から「データを元に意思決定をする以外の方法」で既に色々やっているんです。 この中で、 データドリブンになることを押し付けることなく、自然とデータドリブンになることのメリットを知ってもらうにはどうしたらいいか 彼らの既存の方法を後押しする、もしくはリプレイスするようなデータ分析ってなんだろうか というのを真剣に考えるようになりました。今、「データ分析の民主化」を社内で取
こんにちは。 今日は、データドリブンな組織になるために、何をしたらいいかを考えてみたので、それについて書きます。 データドリブンな組織の必要性 先日、以下の記事で「データドリブンな組織ってなんで必要なのか」と言う観点で記事を書きました。 st-hakky.hatenablog.com 上の記事を要約すると、以下のようになります。 意思決定を「早く・確実に・納得感を持って」するために、データ分析をする(アナリスト視点) データを活用して新機能の開発やコスト削減を行う(MLエンジニア視点) データ分析をベースにした組織、つまりデータドリブンな組織になるためには「データ分析の民主化」が必要(組織全体の視点) データドリブンな組織になるためには、「データ分析の民主化」って言う最近のホットワード(?)なのか知りませんが、そう言うのが必要です。 ぼんやりした言葉なので、具体的に何をすればいいのかと言う
こんにちは。 本当にクソいまさらなんですけど、アンサンブル手法とか勉強していたら復習したくなってきたので、ここで復習もかねてまとめておきます。 決定木とは 決定木の概観 決定木はおそらく機械学習とかをやったことがある人なら確実に一回は見たり使ったり聞いたりしたものではないかと思います。決定木は、ツリー構造の形で分類または回帰のモデルを構築するものです。決定木では、そのアルゴリズムによっては、カテゴリと数値の両方のデータを扱うことができます。 参考:Decision tree learning - Wikipedia 決定木の目的は、変数とその値の組によって表現されたデータをいくつかのサブセットに分割していくことにあります。そして分割していく過程で、より木の深さを深くせず、且つ汎化性能の高い出力を返せるような木を構築していくことがゴールになります。 決定木はその名の通り"木"なので、木によっ
こんにちは。 決定木の可視化といえば、正直scikit-learnとgraphvizを使うやつしかやったことがなかったのですが、先日以下の記事をみて衝撃を受けました。そこで今回は、以下の解説記事中で紹介されていたライブラリ「dtreeviz」についてまとめます。 explained.ai dtreevizの概要 dtreevizとは より良い決定木の可視化を目指して作られたライブラリです。 解説記事 : How to visualize decision trees Github : GitHub - parrt/dtreeviz: A python machine learning library for structured data. Sample Imagesdtreeviz/testing/samples at master · parrt/dtreeviz · GitHub 多
こんにちは。 今Deep Learningの論文紹介をやっているのですが、私が紹介しようかなと思った論文がKerasの作者でもある@fcholletさんのCVPRの論文でした。 It's official: my paper "Xception: Deep Learning with Depthwise Separable Convolutions" was accepted at CVPR. https://t.co/D876HseFDo— François Chollet (@fchollet) 2017年3月4日 読む過程で調べた資料とかも凄くまとまっていたのですが、自分の勉強がてらまとめておこうと思います。 ※あらかじめ言っておくと、ココに出ている元論文を全部隅から隅まで読んだわけではないのと、Deep Learning弱者なので、一部間違えている可能性があります(出来る限りおいま
こんにちは。 実行時間(処理時間)を計測したいことはよくあると思いますが、今回はPythonで実行時間を測りたいなってなった時の方法を、自分用にまとめておきたいと思います。 ※なんか章立ての粒度がばらばらになってしまった気がするが、細かいことは気にしない。。。 Pythonコード上 Pythonのコード上(という表現がいいのかはわかりませんが汗)で実行時間を計測するための方法が以下。 timeモジュールを使う これが一番最初にパッと思いつく方法かなと思います。 import time start = time.time() func() process_time = time.time() - start print(process_time) デコレーターを用いる方法 こちらの記事で紹介されていたんですが、これは確かに便利だなと思いました(作者の方ありがとうございます)。 自作のデコレー
こんにちは。 今回はデータの正規化についてです。 いろんな文脈で様々な意味で使われている「正規化」っていう言葉ですが、今回は統計や機械学習で扱う数量のデータに対して行うことに絞り、まとめていきたいと思います。 Introduction データの正規化とは こちらの記事を読んでいたところ、Wikipediaを引用されていたので、Wikipediaの正規化のページも合わせてみることにしました。 すると、正規化とは データ等々を一定のルール(規則)に基づいて変形し、利用しやすくすること。別の言い方をするならば、正規形でないものを正規形(比較・演算などの操作のために望ましい性質を持った一定の形)に変形することをいう。 だそうです。いちばん有名なのは後でも紹介するz-scoreだと思いますが、それでイメージしちゃえばわかりやすいかなと。文章の正規化とかもありますね。 つまり、「データを一定の方法で変
こんにちは。 最近、化粧のやり方とかを紹介するYoutuberを見て、「へぇー綺麗にできるもんだなぁ」って感心している私ですが、今日はfunctools.partial()の綺麗な使い方を見つけたので、その紹介をメモがてらしようと思います。 関数やメソッドの引数の一部を固定させておきたい気持ちがある 関数やメソッドの引数の一部を固定させて、可変な引数のみを与えることができる新しい関数を作りたい時があります(たぶん)。 例えば、map関数で使う関数の一部の引数を固定させておきたい場合とかがそうです。 from functools import partial def add_func(a, b): return a + b add_list = list(map(partial(add_func, b=5), [0,1,2,3,4,5])) print(add_list) 他にも色々例はある
こんにちは。 最近、アンサンブル学習について勉強しているんですが、この記事ではBoostingについて調べたことを書きます。以下がその他のアンサンブル学習とか全般的な話とかについて書いた記事なので、バギングとか知りたい人は以下の記事をどうぞ。 st-hakky.hatenablog.com ◯Boostingとは Boostingとは、弱学習器をboostして、そのアルゴリズムよりも強い学習アルゴリズムをつくることです.ブースティングの一般的な考え方は、学習器を連続的に学習させて、より精度が向上するように修正していくことです。 学習した予測器をより良いものにするためには、単純に間違えたものにより注意を払って次の学習を行えばいいと考えられます(以下の図参照)。 引用:Géron, Aurélien. "Hands on Machine Learning with scikit-learn a
こんにちは。 Deep Learningを自分でゼロから組んで(fine tuningとかではなく)、全部ゼロから学習させるのって大変ですよね。 特に、ハイパーパラメーターの設定にすごく悩みます。トップカンファレンスに出されているような高精度の論文では、そういうハイパーパラメーターはさも当然かのごとく設定されているので、まぁモデルを使い回す分には特に問題ないんですが、自分で決めようとすると本当に悩ましいです。 また、Deep Learingは学習に非常に時間がかかりますし、それぞれのハイパーパラメーターの相互関係とかもあり、問題の切り分けが難しいです。 その意味で、グリッドサーチなども対象を決めてやらざるをえず、その場合でもあたりをつけておきたいのが正直な所だと思います。 ということで、ハイパーパラメーターにはいくつも種類があるんですが、今回はその中でも、Batch sizeについてどうや
こんにちは。SQLAlchemyを使っていてわかったこととか勉強になったことをまとめました。 ◯環境構築 以下の記事にまとめました。 st-hakky.hatenablog.com ◯DatabaseのURLの指定方法 Databaseに接続するためにURLを指定する必要があるのですが、そのURLの指定方法は以下のとおりです。 <dialect>+<driver>://<username>:<password>@<host>:<port>/<database>?charset=<charset_type>ちなみに実際に書くときは<>は外して書きます。また「?」以降は無くても動作します。 各要素についての説明は以下のとおりです。 要素 意味 dialect mysqlとかpostgresqlとかを指定します。ここはDBの種類を指定するイメージ driver DBに接続するためのドライバーの指
こんにちは。 Pythonはある程度かけるが、Juliaに関しては全くの初心者である私がこれからJuliaでデータサイエンスをしたり、Deep Learningをしたりしようと思っているので、その学んだ過程とかで参考になった資料とかをまとめておこうかと思います*1。 Juliaは、まだPythonとかに比べてまだコミュニティのレベルとして大きくないせいもあってか、日本語の情報とかはやっぱり少なめですが、ことデータサイエンスの文脈で言えば、Pythonよりも実行速度が早く(C並)、動的プログラミング言語という性質が自分的にはかなり気になっているので、今後に期待って感じで、勉強していこうと思います。 自分も勉強になったこととかは、このブログで発信していこうかなーと思っています。 Links Original Sources HomePage : The Julia Language Githu
こんにちは。 〇この記事のモチベーション Deep Learningで自分でモデルとかを作ろうとすると、複数の入力や出力、そして損失関数を取扱たくなる時期が必ず来ると思います。 最近では、GoogleNetとかは中間層の途中で出力を出していたりするので、そういうのでも普通に遭遇します。 というわけで私も例に漏れず遭遇しました笑。 今回はkerasで複数の入力や出力、そして損失関数を取り扱うときにどうすればいいかについて実践したのでまとめておきます。 〇「複数の入力」を与えたい場合 これは簡単です。普段Modelのインスタンスを作る際に、inputsとoutputsを指定すると思いますが、その際に複数ある場合はリスト形式で渡せばいいだけです。 input_layer1 = Input(shape=(32,)) input_layer2 = Input(shape=(64,)) # ...(モ
こんにちは。 Kaggleをやるにあたって(というかふつうに勉強したかったのもある)、アンサンブル学習の方法は勉強しておく必要があるようなーと思って、勉強してみました。 他のブースティングやスタッキング、アンサンブル学習全般については以下の記事をどうぞ。 st-hakky.hatenablog.com それでは、調べた内容についてまとめていきたいと思います。 ◯Bagging(バギング)とは Bagging(バギング)は、bootstrap aggregatingの略です。名前から分かる通り、各学習器に使う学習用データをブースストラップサンプリングによって得て、その学習した学習器を予測に用いて最後アンサンブルするという方法になります。 あんまり区別がされている資料を見かけないんですが、これとよく似た方法にPastingというものもあります。Pastingは、重複有りのランダムなbootst
こんばんは。 最近、そろそろ違うプログラミング言語を勉強したいなぁと思っていて、この夏はC++とJuliaを触りたいなーと。 Web開発はするので、Javascriptとかもガンガン触ることになりそう。2ヶ月でどこまで触れるかって感じですね。 さて、データサイエンス界隈で目にするJuliaですが、正直何かよくわかっていなかったので、上記の背景?もあり、夏休みを機に触ってみることにしました。 なぜJuliaなのか なぜJuliaを使う必要があるのがふつうに気になったので、調べてみました(計算速度が早いとかは知ってたんですがその程度だったので)。Juliaの公式のHPで出ている「Why We Created Julia」という記事がふつうに初期の思想がまとまっていて良かったです。 簡単に何をやりたいか(Juliaの特徴)を説明すると、 クソ優秀な言語をオープンソースで作りたかった(Rubyのよ
こんにちは。 GANの発音を、「ガン」 or 「ギャン」のどっちかと言われたら、「ガン」な私です(いやまぁ気持ちだけ…)。 さて、先日某つぶやきサイトに流れてくるつぶやきを眺めていたら、衝撃的な動画を見つけました。 ぐぉォォ。。。マジカ。 == Progressive Growing of GANs for Improved Quality, Stability, and Variation https://t.co/Qp8d4N4zXr via @YouTube— Hakky@Julia勉強中(´・∀・) (@St_Hakky) 2017年10月28日 それが以下の動画です。 www.youtube.com これは、今回読んだ「Progressive Growing of GANs for Improved Quality, Stability, and Variation」というタイト
こんにちは。 今回は、データ分析をするときのフォルダ構成をどうするのか問題について、ちょっと調べてみたので、自分のこれまでやってきたことを振り返りつつ、まとめます。 調べた動機 某データサイエンス系のインターンシップでの反省点でもあり、これは普段研究などでコードを書くときに悩みながら作っているのですが、どうしたものかと思って悩んでいました。 データの保存どこでどういうフォーマットでするんだよ! くっ、このモデルも試したい、、、でもファイルとフォルダの構成ガァァァァ Aさん、基礎分析とモデルのファイルをごっちゃにするんでない!(ウワァァァァァ!!誰かしっかり共有しておけヨォォォ!!!) とまぁこんな感じで、複数人でやるとより露骨になってきたのと、いつもだいたいやるフローとしては同じなので、共通化や一般化がある程度できるはずと思っていました。 私がこれまでやっていたこと ├── README.
こんにちは。 ※このエントリは、途中ですが資料の共有とかのため、突貫で体裁だけ整えて掲載しています。異常検知と変化検知の分野は、初心者なので、「こんな手法あるよ」とか「こんな論文面白いよ」とかあれば教えてほしいです。 読んだ本 最近某勉強会でいろんな機械学習の勉強をしているんですが、私のデータ分析への興味が実世界への適用にあるのもあり、以下の本を一人読んで一人で発表することにしました(皆そんな感じで発表しているという笑)。 「異常検知と変化検知~機械学習プロフェッショナルシリーズ~」 サポートページ サポートページ:本のサポートページ – Dr. Ide's Home Page 目次 目次は以下のような感じです。 第1章 異常検知・変化検知の基本的な考え方 第2章 ホテリングのT2法による異常検知 第3章 単純ベイズ法による異常検知 第4章 近傍法による異常検知 第5章 混合分布モデルによ
こんにちは。 私の愛するMacがぶち壊れて、ここ最近Windowsで開発をしているのですが、MeCab入れるときの手順がもうクソめんどくさくて、「あぁ、、、またやるのかこれ、、、」ってなってたところに、Janomeと出会いました。笑 調べている過程で知ったんですが、結構いろんな形態素解析のソフトがあるもんなんだなぁと。機会があれば色々使ってみたいなと思います。 bita.jp さて、今回はJanomeを使ってみたので、そのことについて記事を書こうかと思います。 環境 環境は以下の通り。 Windows 64bit Python 3.6.0 Anaconda 4.3.22 Janome 0.3.1 まずはインストール ドキュメントには、pipで入ると書いてありました。MeCabだと辞書を入れないといけませんが、Janomeはpip一発で全部入るようです。素晴らしい。 pip install
こんにちは。 PyCon2017のビデオを全部ではないですが、気になったタイトルのものだけ見ているんですけど、その中で面白いものをみつけたので紹介します。 PyCon2017:Python's Visualization Landscape Pythonにはめちゃめちゃ沢山の可視化ライブラリがあります。 ぶっちゃけどれ使ったら良いんだみたいな感じになりますし、それぞれ特性はあるんだろうなぁとは思いつつも、「まぁmatplotlibとかseabornとかでいいか」みたいな感じになっちゃったり、「おぉーこれ便利じゃん」みたいな感じで、その場しのぎコードを書いたりしてあとで死にたくなります笑。 同じような思いはみんなもっているようで、PyCon2017で以下のプレゼンがされていました。 youtu.be 動画中で使われている、スライドは以下からみれます。 speakerdeck.com 最近見つ
こんにちは。 今、KaggleのRestaurant Revenue Predictionをやっていて、その中でアンサンブル学習について再度学習してみたので、まとめました。 結構ながくなっちゃったかもですが、頑張って参考文献に飛ばしたりとかしてまとめました(笑) アンサンブル学習とは 機械学習における目標は、汎化性能が高い学習機をデータから構築することです。汎化性能を向上させる方法はいくつかあるわけなんですが、以下の2つの方針があります。 単一の学習器の性能を向上させる 複数の学習器を用意して、それらの予測結果を統合して汎化性能を高める 後者の方法がいわゆるアンサンブル学習といわれるものです。複数の学習器を利用して高い精度を出すことを実現します。 参考文献や本 アンサンブル学習(Ensemble learning)とバスケット分析(basket analysis) - Qiita アンサン
こんにちは。 Gradient Boostingについて調べたのでまとめました。その他の手法やBoostingってそもそも何的な説明は以下の記事でしています。 st-hakky.hatenablog.com ◯Gradient Boostingとは Gradient Boostingの誕生の経緯とかはこちらに書かれているので、そちらを参照してもらうとして、ここではGradient Boostingのアルゴリズムについて解説します。 AdaBoostと同じく、Gradient Boostingは予測器を連続的に予測器を修正、追加してアンサンブルにします。AdaBoostではデータの重みを変えていましたが、Gradient Boostingでは残差誤差にフィットするように予測器を修正します。 以下の図はそのイメージです。以下の図では、決定木を用いて回帰を行っているんですが、まず一番最初はふつう
次のページ
このページを最初にブックマークしてみませんか?
『St_Hakky’s blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く