タグ

*algorithmと*programに関するsh19910711のブックマーク (374)

  • ワーシャルフロイド法をJuliaで(強引に)アニメーション

    はじめに 競プロとかやってると、たまに聞くワーシャルフロイド法 コードは短くて悩むところないけど、これで「抜け」ないんだっけ? とか思ったりするので、一度動画にしてみる。 Julia言語にはGraphPlotなるものがあるのでそれの練習 ワーシャルフロイド法 WikipediaとかもあるけどJuliaでは for k ∈ 1:n , i ∈ 1:n , j ∈ 1:n Dist[i,j]=min(Dist[i,j],Dist[i,k]+Dist[k,j]) end Dist #Distは有向グラフをマトリクスにしたもの 短いです 解説 ググれば素晴らしい解説があると思いますが簡単に 負の閉路のない(クルクル回るとマイナス無限になったりしない)有向(無向)グラフで、最短の経路を求めるには ある中継点を通った方が直通より短ければ、直通の距離をそれに書き換える。 それを各中継点で全通り調べると、

    ワーシャルフロイド法をJuliaで(強引に)アニメーション
    sh19910711
    sh19910711 2025/09/12
    2022 / "グラフ描画にGraphs GraphPlotを用いますが、上にテキストを重ねたかったりしたので融通を効かせる為、Compose(GraphPlotは元々この形式出力"
  • アノテーションツールをClaudeに作らせて、自分の設計力を見直してみた

    イントロ ELEMENTS開発部AiQグループの森です。私は、AiQ PERMISSIONというプロダクトの開発を担当しております。AiQ PERMISSIONは、セルフガソリンスタンドで義務化されている給油者の行動監視をAIが代替し、人手不足の解消や業務効率化、安全性の向上を目的としています。 AiQ PERMISSIONでは、設置しているカメラ映像から行動を検知して、給油者が不審な行動を対象のレーンに許可を出したり、給油を緊急停止したりします。 この処理を行う際に、ガソリンスタンドのカメラの映像情報と各レーンの番号の対応、並びに監視する範囲を指定するために、下記のオレンジ色や赤紫色の枠を設定し、アノテーション情報を付加する必要があります。 問題/課題 ツールを作成したのは2025年3月時点で、Vibe Codingで簡単なLPなどは作れるような状況でした。が、実際に業務をしていたら「

    アノテーションツールをClaudeに作らせて、自分の設計力を見直してみた
    sh19910711
    sh19910711 2025/09/06
    "「なんか違う」出来のものができる / 動くものでフィードバックを得て自分の言語化力の不足している点に気づく、というのが特に良かった"
  • 特徴量エンジニアリングの道標

    門脇大輔 阪田隆司 保坂桂佑 平松雄司 著 Kaggleで勝つデータ分析技術 2019-10-09 技術評論社 https://gihyo.jp/book/2019/978-4-297-10843-4 polarsの練習も兼ねて、データの前処理と特徴量エンジニアリングについて網羅的にメモを残します。 ダミーのデータセットを基に相関のあるデータを作成し、このデータを使って遊んでいきます。 TL;DR 欠損値は平均で埋めるだけにせず、欠損かどうかのカテゴリ変数へ掃き出して、よりよい補完値で埋める。または埋めなくても良い手法で分析する。 スケーリングは標準化だけではなく、順位や分布の裾野を見ながら最適なもの(モデルが扱いやすいもの)を選ぶ。 カテゴリ変数のエンコーディングは、one-hot化やLabel Encodingだけでなく、精度重視ならTarget Encodingなども試す。 列同士

    特徴量エンジニアリングの道標
    sh19910711
    sh19910711 2025/08/20
    2024 / "入力からは読み取れないデータを作ることが特徴量作成の肝 / スケーリングは標準化だけではなく、順位や分布の裾野を見ながら最適なもの(モデルが扱いやすいもの)を選ぶ"
  • 【論文解説+Tensorflowで実装】VQ-VAEを理解する

    今回は、VQ-VAE(Vector Quantised-Variational AutoEncoder)を解説したいと思います。 VQ-VAEもVAE(Variational AutoEncoder)と同じで潜在変数を使った画像などの生成モデルです。 通常のVAEと違うところは、VAEでは潜在変数\(z\)が連続的なベクトルを取りましたが、VQ-VAEでは潜在変数が離散的なベクトルを取る点です。 画像や自然言語は来離散的なもので、例えば「犬」から「」へ少しずつ変化していくものでありません。 ですので、潜在変数を離散的にすることは自然であると言えます。 では、以下の論文をもとに解説していきたいと思います。 『Neural Discrete Representation Learning』 最後にTensorflowで実装していますので、そちらも参考にしていただければと思います。 PyTo

    【論文解説+Tensorflowで実装】VQ-VAEを理解する
    sh19910711
    sh19910711 2025/07/26
    2021 / "通常のVAEと違うところは、VAEでは潜在変数𝑧が連続的なベクトルを取りましたが、VQ-VAEでは潜在変数が離散的なベクトルを取る / 潜在変数の事前分布、事後分布をカテゴリカル分布とする"
  • 角度を用いた深層距離学習(deep metric learning)を徹底解説 -PytorchによるAdaCos実践あり-|はやぶさの技術ノート

    こんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。最近、距離学習を楽しく勉強しています。 今回は、角度を用いた深層距離学習のSphereFace・CosFace・ArcFace・AdaCosについて勉強したので、備忘録も兼ねて記事を書きます。

    角度を用いた深層距離学習(deep metric learning)を徹底解説 -PytorchによるAdaCos実践あり-|はやぶさの技術ノート
    sh19910711
    sh19910711 2025/07/22
    2020 / "ArcFaceやCosFaceなどには、スケール:s, マージン:mといったハイパーパラメータ / AdaCosでは、それらのハイパーパラメータを自動で設定"
  • WGANの論文読んでTensorflowで実装する その1 - 時給600円

    前回、間違えてUnrolledGANの論文を読んでしまった。 このWGANというのが当は読もうと思った論文。正直UnrolledGANを先に読んでなかったらWGANの理解が深まらなかったと思う。読んでてよかった という訳で論文はここからどうぞ [1701.07875] Wasserstein GAN あとコードも先に置いておく github.com WGANという名前が付いてるから、このWが重要になってくる。WはWassersteinの略。わずさーなのかわっさーなのか英語がカスなので読み方がわからん・・・ Wassersteinというのは論文ではEarth Mover (EM) distanceとも呼ばれる。distanceだから距離を表すもの。この距離をGANに使ったらいい感じになったってことなのか?と読み始めに思った。 今まで自分が読んだGANはどれも GeneratorとDiscr

    WGANの論文読んでTensorflowで実装する その1 - 時給600円
    sh19910711
    sh19910711 2025/07/05
    2018 / "EM: 二つの分布をそれぞれ四角のブロックの集まりで表す + コンパクトじゃない集合においても使えるらしい。その時不思議な結果が出る / 志賀浩二先生の「位相への30講」"
  • Go1.19で採用された Pattern-defeating Quicksort の紹介

    今回はPattern-defeating Quicksortの論文を読んでいき、Goでどのように実装されているか簡単に見ていく

    Go1.19で採用された Pattern-defeating Quicksort の紹介
    sh19910711
    sh19910711 2025/06/20
    2022 / "イントロソートの改良版 / 再帰の深さが深くなりすぎるとヒープソートに切り替えたり、パーティションのサイズが小さくなりすぎると挿入ソートに切り替え"
  • [Package] 最適輸送問題のパッケージを試す | POT, OTT-jax, OptimalTransport.jl

    最適輸送 (Optimal Transport) は近年機械学習などの分野で注目されているトピックです. 私も前世に,Optimal Transportに関するPDFファイル (というか?でしょうか) を読んだ記録を書いていたことがあります (以下のQiita検索を見てください). これまでPythonの代表的なパッケージとしてPOT (Python Optimal Transport),JuliaのパッケージとしてOptimalTransport.jl などがありましたが,最近ネットサーフィンしていると Google Research謹製のJAXパッケージ Optimal Transport Tools (OTT) と呼ばれるものが登場していたことに気付いたので比較をしてみました.またPOTとOTT-jaxの比較については公式ドキュメントが公開しているものを実行して挙動を確認しました.

    [Package] 最適輸送問題のパッケージを試す | POT, OTT-jax, OptimalTransport.jl
    sh19910711
    sh19910711 2025/05/11
    2021 / "最適輸送: Pythonの代表的なパッケージとしてPOT (Python Optimal Transport),JuliaのパッケージとしてOptimalTransport.jl など / OTT: Google Research謹製のJAXパッケージ"
  • Deep SVDDに基づく外れ値検知をPyTorchで実装した - 備忘録

    はじめに 外れ値検知の機械学習モデルの一つとして"Deep SVDD" が知られている。 今回はこれを、異常検知/外れ値検知のためのPythonパッケージPyODの仕様に沿った形で、PyTorchにより実装したということである。 外れ値検知は1クラス分類と捉えることができ、「通常」クラスか「それ以外(=外れ値、つまり異常)」という分類が行われる。 "Deep SVDD"は、外れ値検知の既存手法であるOne-Class SVM / Support Vector Data Description (SVDD) の非線形カーネルをニューラルネットワークで置き換えたものである。 準備 PyODはpipでインストール可能である。 pip3 install pyod ほか、torch, sklearn, numpy, tqdmのインストールを済ませておく。 Deep SVDDについて 概要は以下の記事

    Deep SVDDに基づく外れ値検知をPyTorchで実装した - 備忘録
    sh19910711
    sh19910711 2025/05/04
    2021 / "Deep SVDD: 外れ値検知の既存手法であるOne-Class SVM / Support Vector Data Description (SVDD) の非線形カーネルをニューラルネットワークで置き換え"
  • Go Conference 2019 Autumn Go で超高速な 経路探索エンジンをつくる/Go Conference 2019 Autumn go-ch

    Go Conference 2019 Autumn Go で超高速な 経路探索エンジンをつくる/Go Conference 2019 Autumn go-ch

    Go Conference 2019 Autumn Go で超高速な 経路探索エンジンをつくる/Go Conference 2019 Autumn go-ch
    sh19910711
    sh19910711 2025/04/26
    2019 / "Bidirectional Dijkstra: 両端からダイクストラで交互に探索 + 片方で探索済みのノードにあたったら終了 / Contraction Hierarchy: 隣り合っていないノード間の最短経路をショートカットとして事前にエッジとして追加"
  • 検索タスクにおけるBM25のコサイン類似度とスコアの精度比較 - Qiita

    追記 比較する条件を整理した改良版を書きました。記事は記録として残しておきます。(2024/11/28) 概要 以下の記事の疑問に自分なりに答えを出すために、実際にBM25スコアとBM25ベクトルのコサイン類似度で検索精度にどう違いがあるのか検証しました。 【疑問】BM25でもTFIDF同様にコサイン類似度に基づいてランキングしてよいのか 背景 上記別記事で抱いた疑問の概略は以下です。 検索タスク等において、ランキングの指標として、TFIDFではTFIDF重みベクトルのコサイン類似度を用いるが、BM25ではBM25スコアを用いることが多い BM25スコアはクエリに含まれる単語を検索対象文書におけるその単語のBM25の重みに変換して足し合わせた値である。 BM25でもBM25の重みベクトルのコサイン類似度(BM25コサイン類似度)をランキングに用いたらだめなのか? 記事で書いていない内容も

    検索タスクにおけるBM25のコサイン類似度とスコアの精度比較 - Qiita
    sh19910711
    sh19910711 2024/10/13
    "どちらかというと、rank_bm25のほうがシンプルな実装をしており、scikit-learnのBM25Vectorizerは、低頻度語のフィルタリングなど、いろいろ気の利いた処理が入っていそう"
  • Kernel t-SNEを使ったデータの分類をフルスクラッチ実装でやってみた - Qiita

    $ $ 記事で取り扱う内容は下記の3点となります. SNE の理論と実装 $t$-SNE の理論と実装 Kernel $t$-SNE の理論と実装 $ $記事では Kernel $t$-SNE によりデータを分類することを目標としますが,その過程において,SNE,$t$-SNE の理論と Python による実装例もご紹介したいと思います. はじめに 機械学習手法の一つであるクラスタリング (Clustering) や分類 (Classification) は実社会の様々な場面で活用されています. 例えば次のような活用例が挙げられ,実は私達の身近なところで使われていることがわかります. 顧客タイプを分類しマーケティングやセールスへ活用 スパムメールのフィルタリング 株価予測 悪意のある金融取引の検知 なお,クラスタリング (Clustering) と分類 (Classification

    Kernel t-SNEを使ったデータの分類をフルスクラッチ実装でやってみた - Qiita
    sh19910711
    sh19910711 2024/10/12
    "クラスタリング (Clustering) と分類 (Classification) は異なり / この違いは t-SNE と Kernel t-SNE の違いにもなる / 類似度を計算する際に,SNEではガウス関数を使用しますが t-SNE ではスチューデントの t 分布を使用" '20
  • Word2Boxの実装を読み解く - Qiita

    はじめに 近年、単語表現を点で表すのではなく、箱のような幅を持つような表現で埋め込む手法が流行ってきています。そこで、私の研究でもこの分散表現を使ってみたいと思い、 Word2Box: Capturing Set-Theoretic Semantics of Words using Box Embeddings の論文を読んでみましたが、内容を理解するのが困難でした。そこで、Github上のソースコードからなんとかモデルの内容について理解しようと試みてみました。理解が不十分なところが多々ありますので、ご教示いただけると幸いです。 提案手法 Box Embedding とは まず、Box EmbeddingやWord2Boxについて簡単に説明します。 Box Embeddingはその名の通り、Box状に埋め込みます。 例えば、 "bank" という英単語を2次元で埋め込むことを考えます。Bo

    Word2Boxの実装を読み解く - Qiita
    sh19910711
    sh19910711 2024/09/07
    "Word2Box: 周辺語から中心語を予測するような学習 / 正例と周辺語との距離は近づけ + 負例と周辺語との距離は遠ざける / torchtext.data.Field: 自然言語処理のあらゆる前処理をサポート" doi:10.18653/v1/2022.acl-long.161 ACL'22
  • グラフ向け深層学習ライブラリDeep Graph Library (DGL)の初歩の初歩 - Qiita

    グラフ向けの深層学習ライブラリDeep Graph Library(DGL)の基的な使い方について紹介します。公式ドキュメントに事例やAPIの説明が詳細に載っていたりチュートリアルも豊富にありますが、DGLの一番基的な動作(だと個人的に思っている)ノードの特徴量のmessageとreduceという2つの処理について、丁寧に説明している記事がなかったので説明してみます。 Deep Graph Library (DGL)とは? New York UniversityとAWSが開発しているPytorch-basedの(?)グラフと対象としたDeep Learningのライブラリです。 画像や言語など従来よく研究されているデータ構造ではTensorFlow, Pytorch, Chainerなど有名なライブラリがあり、CNNやRNNなどが1つの関数(公式ではbuilding-blocksと言っ

    グラフ向け深層学習ライブラリDeep Graph Library (DGL)の初歩の初歩 - Qiita
    sh19910711
    sh19910711 2024/06/20
    "DGL: New York UniversityとAWSが開発しているPytorch-basedの(?)グラフと対象としたDeep Learningのライブラリ / ちなみにDGLのリポジトリに結構最新のモデルも実装されているので使えそう" 2019
  • アルゴリズム設計に欠かせない問題解決のための「還元」 with Clojure - Qiita

    システムエンジニアプログラマーは、問題解決に取り組むことが主な仕事ですが、 直面する問題解決に取り組む中で、過去に似たような問題に出会っていたことに気が付くことがよくあると思います。 この記事では、問題を別の問題に置き換えて考えることを言語化した、計算理論の世界の「還元」という概念を紹介しようと思います。 紹介の中で使うコードは、今の仕事で使っているClojureで書きました。(Clojureがわからなくても内容は理解できると思います) また、個人的な解釈を含むので、誤っている場合があります。個人的な解釈については、「~ていそうです」「~と思いました」「~な気がします」みたいな表現になっています。 1. 還元(reduce) 還元(reduce)とは、ある計算問題Aを別の計算問題Bに変換することです。 問題解決においては、 「この問題(A)って要はあの問題(B)なのでは?」 「あの問題(

    アルゴリズム設計に欠かせない問題解決のための「還元」 with Clojure - Qiita
    sh19910711
    sh19910711 2024/06/19
    "問題を別の問題に置き換えて考えることを言語化した、計算理論の世界の「還元」という概念 / 「この問題(A)って要はあの問題(B)なのでは?」「あの問題(B)さえ解ければ、この問題(A)が解ける」みたいな" 2021
  • しゃくとり法を Rust のイテレーターで扱うライブラリを作ってみた - Qiita

    はじめに 競技プログラミングで、しゃくとり法 (Two-pointer) を使いたくなることがあります。 その場で短く実装しようとすると、いろいろな操作を 1つのループ中に書きがちです。うっかりバグらせてしまうことも多いです。 そこで、先人の実装を参考に、Rust で動くしゃくとり法ライブラリを作ってみました。 Haskellでしゃくとり法を攻略する 尺取り法の最強ライブラリを作った。 - isyumi_netブログ このライブラリが実用的かどうかは分かりません。「しゃくとり法を部品に分けて考える」ことの練習になるはずです。そんな紹介記事です。 2024年エイプリルフールのネタ記事でもあります。 記事で行うこと しゃくとり法の簡単な紹介と、複数の関数に分ける考え方を示します Rust のイテレーターで扱うライブラリを 3通り実装します 「A. 有効な区間のみ返す」Iterator トレイ

    しゃくとり法を Rust のイテレーターで扱うライブラリを作ってみた - Qiita
    sh19910711
    sh19910711 2024/06/14
    "Two-pointer: 短く実装しようとすると、いろいろな操作を 1つのループ中に書きがちです。うっかりバグらせてしまう / 変数が何を指すかが参考実装によって異なりがち + 問題にあわせて実装を更新する際に混乱しやすい"
  • CNNによる画像分類:背景の影響を低減させる正則化 - Qiita

    はじめに CNNを用いた画像分類モデルを構築するときに、認識したい物体をちゃんと認識したモデルを作るのは結構難しかったりします。特に学習に用いるデータが少なくて偏りがあると以下の例のように画像の背景に基づいた分類モデルになってしまうこともあり得ます。 画像引用:https://arxiv.org/abs/1602.04938 この記事では画像の背景の影響を少しでも減らして認識したい物体を認識したモデルを作るための手法として、Orthogonal Sphere Regularizationという正則化があったので試してみます。 今回の記事で参考にした論文はこちら↓ 使用したコードは以下のGitHubリポジトリに置いてあります。PyTorchCNNを構築し、学習はGoogle ColaboratoryのGPUを用いて行なっています。 Orthogonal Sphere Regularizat

    CNNによる画像分類:背景の影響を低減させる正則化 - Qiita
    sh19910711
    sh19910711 2024/06/14
    "CNN: 学習に用いるデータが少なくて偏りがあると以下の例のように画像の背景に基づいた分類モデルになってしまう / OS Regularization: 背景の空の部分の重要度が減少したことが良い効果をもたらした感じ / ord=fro" 2022
  • 競プロにおける「実験コード」の書き方

    競技プログラミングにおける「実験コード」の書き方について、自分なりにどのような点に気を遣って書いているかをまとめたスライドです。 (このスライドは「競プロ道場鯖」にて 2022/04/30 に行われたLTで使用されたものです。) 配布資料はこちら : https://drive.google

    競プロにおける「実験コード」の書き方
    sh19910711
    sh19910711 2024/06/07
    "実験コード: 小さな問題を実験的に解いて観察する + 計算量が悪くても良い / 問題から順向きに解法を導くのが理詰めだとすると、答え(結果)から逆向きに解法を導くのが実験 / 解を眺めるとパターンが見えてくる" 2022
  • Poincaré Embeddings でJ1リーグのチーム・選手を可視化 - u++の備忘録

    ふと「Poincaré Embeddings」*1で遊んでみたいと思い立ち、サッカーJ1リーグのデータで試してみました。 Poincaré Embeddings gensimでの実装とデータセット Poincaré Embeddingsの学習 活用方法 おわりに Poincaré Embeddings Poincaré Embeddingsに関する説明は、ABEJA*2やscouty*3のブログに譲ります。 Poincaré Embeddings は端的に言うと word2vec の埋め込み先をユークリッド空間ではなく双曲空間にするという手法で、階層構造やべき分布をもつデータを埋め込むという問題設定において、低次元でもよい表現を与えられるという特徴があります。 Poincaré Embeddings による職種の類似度計算とその利用 - LAPRAS AI LAB gensimでの実装とデ

    Poincaré Embeddings でJ1リーグのチーム・選手を可視化 - u++の備忘録
    sh19910711
    sh19910711 2024/05/11
    "gensimの実装では正則化の影響で周囲にノードが集結しすぎないような工夫 / チーム名が中心 + 円周側に選手 / 「浦和レッズ」の近くに「サンフレッチェ広島」が配置 + 移籍した選手の影響ではないか" 2019
  • ランダムフォレストをスクラッチで実装したい - Qiita

    非Deepな機械学習手法としてランダムフォレスト (Random Forest) を選択する場面は多々ありますが、基的にライブラリ任せになってあまり中身を意識することがありません。ので、今回はランダムフォレストの内部的な仕組みを確認しつつ、それを踏まえてPythonでスクラッチ実装していこうと思います。 ランダムフォレストについて ランダムフォレストの仕組みに関する分かりやすい記事は探せばいくらでもあるので、ここでは以降が読みやすくなるよう実装の視点から少し解説をつけておきます。 ランダムフォレストはたくさんの決定木から構成され、決定木はノードから構成されます。イメージとしては以下のようになります。 なので、実装の手順としては、 ノード : Node 決定木 : DecisionTree ランダムフォレスト : RandomForest の3つのクラスを実装していきます。 1. ノード

    ランダムフォレストをスクラッチで実装したい - Qiita
    sh19910711
    sh19910711 2024/05/09
    "sklearn.tree は使わない縛り / RandomForest: 入力されたデータからランダム抽出したサブセットを各決定木への入力とすることで多様な木を構築 + 抽出の際、使用する特徴量についても選択" 2020