サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Wikipedia
www.kde.cs.tut.ac.jp/~atsushi
はじめに タイトルが難しいです。。。 やりたいことは、配列をソートしたときに、ある値の添え字 n がどこにきたか知りたいということです。 日本語が難しいです。。。下の図のようなイメージです。 ソートしたあとの添え字の並びが欲しいんです。 ソート前: 1 2 3 4 [0.3][0.1][0.5][0.2] ソート後: 2 4 1 3 [0.1][0.2][0.3][0.5] コード pair を使うことで、値と添え字の両方を保存できます。 double 型の乱数を生成して、それを基準にソートします。 #include <iostream> #include <vector> #include <algorithm> #include <cstdlib> #include <ctime> int main(int argc, char *argv[]) { std::vector<s
はじめに Open Hack Day Japan という、ヤフー株式会社が主催する、開発イベントに参加してきました。Hack Day は、24 時間で、自由にプロダクトを作成するイベントです。これまで、ヤフー社内だけで行われていたイベントが、この度、外部の人も参加できる形で開催されるということで、本研究室の OB であり、私が会社員であったときに同僚だった杉山さんと、本研究室の現メンバーであり、Web 企業での実務訓練経験のある小坂さんとチームを組んで参加してきました。 一日目 一日目は、夕方ごろまで、何を作るかを、まったり話あっていました。というのも、すぐに思いつくアイディアは、すでに誰かが作っており、なかなか独自性のあるものを思いつくことができませんでした。また、アイディアとしてはおもしろくても、技術的には、単なる写真投稿サービスであったりなど、なかなか新規性のあるものを思いつくこと
はじめに 画像認識の標準的な特徴ベクトル Bag-of-Visual-Words を作成する時に、画像から大量に局所特徴量を抽出します。局所特徴量を抽出する際の特徴点の位置を決める方法、サンプリング方法には、一定の大きさ・角度・間隔で特徴点をとる Dense (Grid) Sampling が一般的です。この Dense Sampling を、OpenCV で再現する際には、DenseFeatureDetector クラスが便利です。 サンプルプログラム 入力された画像ファイルに対して、特徴点の位置を Dense Sampling 法で設定し、結果をファイルに書き出すプログラムです。使用した OpenCV のバージョンは、2.3.1 です。 #include <iostream> #include <opencv2/imgproc/imgproc.hpp> #include <opencv
はじめに 近似最近傍探索は、その名のとおり、k-近傍探索の高速な近似手法です。 大量にあるデータから、検索クエリのk-近傍となるデータを、高速に探してくる技術です。 近似最近傍探索の有名ライブラリに、FLANN(Fast Library for Approximate Nearest Neighbors)があります。 FLANN 自体、独立したライブラリとして存在しているのですが、OpenCV にも組み込まれています。 しかも、OpenCV の Python インターフェースからも叩けます。 各ライブラリのバージョン Python から FLANN へデータを渡すには Numpy の行列オブジェクトを用います。 今回は、以下の環境で、実行を確認しました。Python、Numpy、OpenCV は独自にビルドしたものです。 Debian GNU/Linux 6.0.5 Python
はじめに Python には Numpy/Scipy という行列代数パッケージがあります。 Matlab や R のような行列代数が行えるので大変便利です。 Numpy/Scipy ともに特異値分解関数 svd を持っているのですが、 特異値の数が指定できないため、やや不便です。 しかし、Scipy の固有値分解関数 eigh は、固有値の数が指定できるので、 ちょっとした行列テクニックを用いることで、特異値の数を指定できる特異値分解を実現できます。 ちょっとした行列テクニック m 行 n 列の行列 A を特異値分解することを考えます。 行列 A を用いて、m 行 m 列の行列 B を作成します。 この行列 B を「固有値」分解します。 ここで、一度もどって、行列 B を行列 A の特異値分解で表してみます。 なんと行列 B の固有値分解と類似した形になりました。対応づけ
はじめに これまで BLAS には、高速な GotoBLAS を使ってきましたが、 開発が終了していることから、移行先を検討していました。 GotoBLAS の後継であり、開発が続いていることから、OpenBLAS を使うことにしました。 研究室では Debian GNU/Linux を使用しており、作業当時のバージョンは squeeze です。 準備 必要なライブラリなどをインストール/ダウンロードします。 まず、今回、独自にビルドしないライブラリなどを aptitude でインストールします。 libatlas-base-dev が、後半で重要となります。 $ sudo aptitude install gfortran git swig $ sudo aptitude install python python-numpy python-scipy python-nose
はじめに Hadoop の使用を目的として、研究室に分散処理環境を構築しましたが、 折角なので MPI 関連のものも使ってみようと思います。 ScaLAPACK は、数値計算ライブラリとして有名な LAPACK の分散メモリ環境バージョンです。 以下、環境は Debian GNU/Linux の lenny です。 インストール MPI の実装には MPICH や OpenMPI などがありますが、今回うまく動いたのは LAM でした。 $ sudo apt-get install lam4-dev scalapack1-lam scalapack-lam-dev libatlas3gf-base libatlas-base-dev 設定 マスターになる PC で、設定ファイルにホスト名か IP アドレスを列挙します。 CPU 数なんかも指定できます。CPU 数は /proc/cp
はじめに 絶賛 Scala を勉強中ですが、ある程度慣れてきたので、研究でも使用しています。 研究の中で、k-medoids 法によりクラスタリングする必要があったので、今回作りました。 k-medoids 法の詳細については、ググれば沢山でてくると思うので省略しますが、 クラスタリング手法で有名な k-means 法で、クラスタの代表点に、重心ではなく medoid を使うものです。 medoid とは、クラスタ内の点で、他の点との距離の総和が最小になる点です。 重心を使わないため、k-means 法よりも、外れ値の影響が少なくなります。 コード とりあえず全体のコードをベタっと貼り付けます。 テストデータの作成などで長くなってますが、k-medoids 法のコアの部分は 20 行程度です。 ちなみに、Scala のバージョンは 2.8.1 です。 import scala.
はじめに 突然ですが、僕は、次元削減厨です。 高専の時に主成分分析・独立成分分析に出会ってから、次元を削減し続けてきました。 ウソです。途中、検索の特徴量の研究やったり、会社はいって Web サービス作ったりしてました。 それはさておき、多様体学習という学習アルゴリズムの枠組みがあります。 全体としては変な形でも局所的に見ればユークリッド空間という、多様体の性質を利用してます。 その多様体学習に Isomap という非線形次元削減手法があります。 難しそうですが、なんてことはない、多次元尺度構成法の距離に測地線距離を使ったものです。 測地線距離は、ユークリッド距離のような直線的なものではなく、道に沿ったものです。 Isomap では、データ点間をつないだグラフ上での、最短経路で近似します。 k近傍グラフの作成 測地線距離の計算の前に、データ点間をつないだグラフを作成します。
はじめに 皆さんは R 好きですか?好きですよね。勉強会もたくさんありますもんね。 僕は嫌いです。遅いので。でも、書き方の工夫でなんとかなることもあります。 僕が研究室でやってることは、表向き検索ということになってるのですが、 やってることは、次元削減とかクラスタリングとか、そのあたりです。 データがなす空間を、解析するという点では、検索も機械学習も一緒ですね。 この、データが空間上でどういった感じになってるのか、の手がかりとなるモノに、 全データ点同士の距離があります。これを行列で表したものが、距離行列です。 距離には、だいたい、まずは、ユークリッド距離を試します。 R で距離行列を求める場合 dist 関数を使いますが、 ユークリッド距離だけに絞れば、自作した関数の方が速くなります。 2点間のユークリッド距離 いま、二次元のデータが、二点あるとします。 ちなみに、データ点
はじめに Scala は Java 仮装マシン上で動作するオブジェクト指向と関数型言語の両方をサポートする言語です。 Hadoop でのバッチ処理を開発する上でソースコードが簡潔になるのではと考え導入しました。 インストール 1.パッケージを取得する Scala のページからダウンロードしてくるか wget してください。 [bash] $ wget http://www.scala-lang.org/downloads/distrib/files/scala-2.8.1.final.tgz [/bash] 2.解凍してインストールする [bash] $ tar xvzf scala-2.8.1.final.tgz $ sudo mv scala-2.8.1.final /usr/local/lib/ $ cd /usr/local/lib $ sudo ln -s
はじめに 研究室では、大規模データベースを対象とした検索インデックスについて研究しています。 分散処理によるインデックス作成を考えていて、今回 Hadoop Streaming でどこまでできるかを試すべく、 Locality-Sensitive Hashing (LSH) を実装してみました。 実装したアルゴリズムについて LSH にはいくつかのアルゴリズムのバリエーションがあります。 LSH の詳細は、ブログなり論文なり本なりありますので、ここでは省略しますが、 類似したデータに同じハッシュ値を与えることで、検索を高速化しようというアイディアです。 このハッシュ値には、0101 とかの短いバイナリ符号が好まれます。 今回は、いくつかある LSH のアルゴリズムのうち、 Charikar,M., Similarity estimation techniques from ro
はじめに 年末から年始にかけて、研究室で分散処理環境を構築しました。 有志数名で 8 台の PC を自作し、Hadoop をインストールしました。 インストール 1. Java をインストールする Sun の Java を使用するため、non-free を追加しているのがポイントです。 [bash] $ sudo vim /etc/apt/sources.list … deb http://ftp.riken.jp/Linux/debian/debian/ lenny main non-free deb-src http://ftp.riken.jp/Linux/debian/debian/ lenny main non-free … $ sudo apt-get update $ sudo apt-get install sun-java6-jdk $ sudo u
はじめに Scala で Hadoop 用の jar ファイルを作ってみました。作ってみたのはよくある単語を数えるプログラムです。 環境は、Debian GNU/Linux に Cloudera 社の Hadoop をインストールしたものです。 準備 Scala で作った jar ファイルを実行するために、scala-library.jar を Hadoop のライブラリに配置します。 この作業は、マスターとスレーブの全マシンで行う必要があります。 [bash] $ cd /usr/lib/hadoop/lib/ $ sudo ln -s /usr/local/lib/scala/lib/scala-library.jar scala-library.jar [/bash] ライブラリの追加を反映させるため tasktracker と jobtracker の再起動が必要にな
このページを最初にブックマークしてみませんか?
『Atsushi TATSUMA Web Page』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く