グラフ理論における木の紹介。例として 二分木を Rust でstep by step で実装。
この記事はハッシュテーブルについて1から説明する内容ではなくて,一度は学習したことがある人向けです. Rustにおける2つのバージョンの,異なるHashMapで使われる理論と実装を解説しています.Rustに限らずハッシュテーブルへの理解を深める役に立てば幸いです. ハッシュテーブル ハッシュテーブルは平均$O(1)$でのインサート,サーチ,デリートをサポートするデータ構造です. いろんな言語にいろんなハッシュテーブルの実装があります.それぞれ中身の実装に微妙に差があったりして厳密な議論をする際にはその中身が大事になってきたりします.実装は大まかには類似していると思いますが,衝突処理や探索方法,冪乗or素数スロットなどに明確なバリエーションが存在します.このあたりの選択は使用するハッシュ関数の性質とアプリケーションの要件によってある程度決定されることです.よく使われるものもありますが,最もよ
TensorFlow2.0とGoogle Colaboratoryの無料TPUを使って、DCGANを実装しました。 訓練経過の様子 pic.twitter.com/2qXowYMk6t — しこあん@『モザイク除去本』好評通販中 (@koshian2) October 21, 2019 何をやったか Google ColabのTPU+TF2.0でCelebA(約20万枚)をDCGANで生成 TF1.X系のTPUでは、同時に実行可能なグラフは1個の制約があったため、GANの訓練が容易ではなかった(こちらの記事にある通り、不可能であったわけではない。しかし、低レベルAPIが必須で決して容易ではなかった)。TF2.X系のTPUでは、もっと容易にGANを実装できた。 DCGANの論文通りのモデル(パラメーター数:G=12.7M, D=11.0M)で。64x64の画像20万枚を、1エポックを40秒程
はじめに 2020年10月にリリースが予定されているPython3.9で新たに加わる変更をPython3.9の新機能 (まとめ)という記事でまとめています。少し分量のありそうな話題を別記事にしていますが、これはその第二弾で、有向非巡回グラフのソートについてです。 有向非巡回グラフとトポロジカルソート まず、ここでいうグラフは折れ線グラフとか棒グラフとかデータを視覚的に表す図表のことではなく、グラフ理論のグラフです。グラフはデータ構造の一種で、ノード(頂点)とそれらを繋ぐエッジ(枝)で構成されています。ノードやエッジに何かしらの意味をもたせることによって、関連性を持つ情報を表すことができます。 グラフにもいくつか種類があり、その最初の分かれ道がエッジに方向があるかないか。方向があるものを有向グラフ(左側)、無いものを無向グラフ(右側)といいます。 エッジはノードを繋ぐものですが、繋がれたノー
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 目的 随時更新されているKPIの時系列データに関して、数値に異常があった場合になるべく早くアラートを出せるようにしたいという要請がありました。これはいわゆる異常検知の問題です。多くの場合、異常検知では異常・正常を判定するラベル情報がないので、教師あり学習ができないことが多いです。教師なしで時系列データを異常検知する方法としては、ARIMA など時系列モデルを当てはめて、予測値と実績値の差が大きすぎるものを異常判定する、という方法が考えられます。しかし、この方法は精度の高い時系列モデルを作成できることが前提です。そこで、別のアプローチがな
最近の自然言語処理では、大規模なテキストから単語の分散表現や言語モデルを学習させて使っています。学習する際のテキストとしては、分量や利用しやすさの都合からWikipediaが選ばれることが多いですが、その前処理は意外と面倒で時間のかかる作業です。そこで、本記事では比較的最近リリースされた前処理済みのデータセット「Wiki-40B」とその使い方を紹介します。 Wiki-40Bとは? Wiki-40Bは、40言語以上のWikipediaを前処理して作られたデータセットです。このデータセットは言語ごとに学習/検証/テスト用に分かれているので、単語分散表現や言語モデルの学習・評価に使えます。言語ごとの対応状況については、以下のページを参照するとよいでしょう。 wiki40b | TensorFlow Datasets 前処理としては、大きくは以下の2つに分けられます。 ページのフィルタリング ペー
はじめに 前回の記事で時系列入力に対するオートエンコーダーを組んだ。 aotamasaki.hatenablog.com 今回は潜在変数を正規分布に押し込むというVariational AutoEncoderを組んでみた。CNNとVAEを組み合わせる記事は割と見つかるのに、RNNとなったとたん見つからないものである。 データはMNISTであるが後述するように、時系列だと見なして入力した。 まずはモデルとデータの概要を説明する。そのあと、結果で再構成された数字と生成された数字の例を示す。最後に、潜在変数Zが正規分布になっているのか確かめる。 はじめに モデルの概要 データの概要 結果 Zは本当に正規分布をしているのか? まとめ 参考文献 モデルの概要 また、赤字で示した損失関数についての数式は以下のようになっている。詳しくは最後に示す参考文献を見ていただきたい。 コードはこんな感じ def
Sparkシリーズ第2弾です。今度はMLlibを使って協調フィルタリングを用いたレコメンデーションの実装を行います。 第一弾 【機械学習】iPython NotebookでSparkを起動させてMLlibを試す http://qiita.com/kenmatsu4/items/00ad151e857d546a97c3 環境 OS: Mac OSX Yosemite 10.10.3 Spark: spark-1.5.0-bin-hadoop2.6 Python: 2.7.10 |Anaconda 2.2.0 (x86_64)| (default, May 28 2015, 17:04:42) 本稿では上記の環境で行ったものを記載していますので、他の環境では設定が異なる場合もあるかと思いますのでご注意ください。また、基本的にiPython NotebookでのSparkの実行を想定しています。
Fukuoka.R#15 https://fukuoka-r.connpass.com/event/139211/ での発表資料です リポジトリ http://github.com/uribo/190831_fukuokar15
数学における凸包または凸包絡は、与えられた集合を含む最小の凸集合である。 Wikipedia: 凸包 上図のように点の集合が与えられた時にその凸包を求めるアルゴリズムを実装してみたのでメモとして残しておきます。 Linear Algebra まずは計算に必要になる点やベクトルと言った概念を定義しておきます。 -- | 2次元の点 type Point = (Double, Double) -- | 2次元ベクトル type Vector = (Double, Double) -- | 2点からベクトルを作成 to :: Point -> Point -> Vector to (x0, y0) (x1, y1) = (x1 - x0, y1 - y0) -- | ノルムを計算する norm :: Vector -> Double norm (x, y) = sqrt $ x ^ 2 + y
概要 絶賛フロントエンド勉強中の井上です。今回は自然言語処理界隈で有名なBERTを用いた文書分類(カテゴリー分類)について学習(ファインチューニング)から予測までを紹介したいと思います。本記事では実装ベースでお話しするので、「そもそもBERTって何?」という方は検索するか、参考URLを載せておくのでそこから飛んでいただけると助かります。 目次 事前準備 学習 評価 予測 参考文献 事前準備 Google Colaboratory 学習は膨大な計算量が必要なので、Google Colaboratoryを使用します https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja 無料でTPU(Tensor Processing Unit)が使えるのでお得! googleさんありがとうございます TPUはIntelのHaswellと
はじめに Pure Rubyな形態素解析器Suikaを作成した。開発中でバッリバリにα版だが、思い切ってリリースすることにした。 suika | RubyGems.org | your community gem host 最も有名な形態素解析器であるMeCabもそうだが、形態素解析器は食べ物の名前がつくことが多い。「Rubyなので赤い食べ物が良いかな」と考えて、文字数とかわいらしさからSuika(スイカ)とした。 使い方 SuikaはPure Rubyで作られているため、MeCabをはじめ特別なライブラリを別途インストールする必要はない。 gem install suika バッリバリにα版なので、機能はないに等しく、オプションなしのMeCabコマンドと同様となる。 $ irb irb(main):001:0> require 'suika' => true irb(main):002:
はじめに 2chまとめを読んでいたら、"長い"みたいなレスを投げられていた二郎コピペがあった。せっかく名文なのに長いの一言で一蹴されては報われないので、日本語の自動要約をしてくれるshucaを用いて短く要約してみた。 shucaとは? github.com python2系で動く自動要約プログラム。shuca単体では動作せず、他に京大で開発されているjuman(形態素解析プログラム)とknp(構文解析プログラム)が必要。 実際に要約してみる まずはコピペを以下から拾ってくる。 fullopen.blog.jp ■その50 今日、ついに二郎デビューしたんでレポっす! 川崎店に行ったらすごい行列でまずびっくり! すっげえな!と思って店の中を見て、 みんなが食ってるラーメンのボリュームを見てまたびっくり! これが二郎・・・と、思わずヨダレが出る。 待つ事20分、やっと席につくことができた。 「ヤ
公式の解説で,「遅延評価を使ってもできる」と書いてくれなかったので。 注意:この記事は,Google Code Jam 2014 Round 1AのB問題 Full Binary Tree についてのネタバレを含みます。 この問題は木DPをする典型的な問題であり,公式の解説にもあるように, 木を根付き木にした後, 頂点でのスコアを,子のスコアのうち大きい方から2つを用いて計算する ことで解けます。何を根として選ぶかをすべて試すとO(N2)解法となり,すべての根の可能性について同時にDPをする*1とO(N)解法になります。だから,根の選び方によって隣接頂点のうち「親以外が子となる」ので,隣接頂点のスコアのうち大きい方から3つを保存するような構造を持つ――待ってください。 もちろん,降順ソートされたスコアのすべてを計算すると,O(N2)時間かかってしまいます。しかし,先頭3つを結果的に計算でき
この記事の目的catboostというライブラリがあります。GBDT(Gradient Boosting Decesion Tree )という決定木をアンサンブルする方式の識別モデルを学習するものです。同様のライブラリは他にはXGBoostやLightGBMなどが有名です。 GBDTって何やっているの?というのは以下のXGBoostのドキュメントの画像がわかりやすいです。要は、複数の決定木が存在していて、その結果をあわせて結果を決定(アンサンブル)しているわけです。学習に応じて徐々に木を追加していくのですが、どうやって新しい木を追加していくかのやり方に、「Gradient Boosting」という手法を使っている、というイメージです。catboostは、カテゴリカル変数の扱いに新しい手法を導入していて、論文にもなっています。catboostの"cat"はcatgoryの"cat"なのですね(
本日MXNet公式でアナウンスがあったばかりのAutoGluonを早速使ってこの記事を書きました。これは普通のHyperparameter Optimizationには止まらない,Feature EngineeringやModel Selectionまで含む,いわゆる「全てお任せ」のAutoMLライブラリです。 中のコードはMXNet主体ですが,AutoGluonで全て隠蔽されているので,実際MXNetを使ったことがなくても問題なく利用できます。 (For Pytorch Userというのがある通りPythonコードを書けばPytorchなどでも利用できる様です。念のため。) 今回は速報的に公式のチュートリアルを追ってみたいと思います。 公式Tweetは以下。 AutoGluon, a new open source toolkit from @awscloud based on #MXN
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く