バスケット分析

最近、POSレジのデータをもとに

バスケット分析をしました。

 

バスケット分析は、

アソシエーション分析とも呼ばれ、

買い物カゴに何と何が一緒に

入っていることが多いのかを

分析する手法です。

 

商品分析の手法(ABC分析、アソシエーション分析)

の説明がわかりやすいです。

 

さて、今回このバスケット分析をPython3で行いました。

その時の備忘です。

 

ーーーーー

バスケット分析に使用するライブラリは、

orange3とorange3-assoiate 。

 

pip3 install orange3

pip3 install orange3-associate

で各ライブラリをインストールする。

 

分析するデータは、

以下のような形式でファイルに保存しておく。

 

A,B,C

A,C

B,C,D

D,E,A

 

1行に1つの買い物カゴの中身を書く。

商品は”,”で分ける。

拡張子は.basket

 

ファイル名を data.basket とした場合、

以下のようなコードで分析できる。

 

import sys
import Orange
from orangecontrib.associate.fpgrowth import *tbl = Orange.data.Table(“data.basket”)

X, mapping = OneHot.encode(tbl)

itemsets = dict(frequent_itemsets(X, 5))

rules = association_rules(itemsets, 0.7)

def decode_onehot(d):
items = OneHot.decode(d, tbl, mapping)
return list(map(lambda v: v[1].name, items))

for P, Q, support, confidence in rules:
lhs = decode_onehot(P)
rhs = decode_onehot(Q)
print(f”lhs = {lhs}, rhs = {rhs}, support = {support}, confidence = {confidence}”)

 

 

MobileNet モデルで物体認識

AIプログラミングの勉強記:

Javascript で物体認識。

PCでどうぞ↓

https://snmc.jp/AI/ml5_image_classifier/

スマホでは動作しないかもしれません。

 

Javascript で動いています。

 

認識モデルは MobileNet です。

MobileNetは、ImageNet(http://www.image-net.org/) の

15万枚以上の画像で学習したモデルで、

ブラウザにダウンロードして使えるように

小さくしてあるものです。

(小さくしてあるためか、認識精度は低い感じがします)

 

参考:日経ソフトウェア2019年5月号

Deep Autoencoder でMNISTを学習

Deep Autoencoder を用いてMNISTの学習を行ってみました。

 

エンコーダーは724次元→128次元→64次元→32次元

デコーダーは32次元→64次元→128次元→724次元

最適化の方法は adadelta

損失関数は binary crossentropy

なお、畳み込みなし。

学習データはMNIST(学習用60,000個、評価用10,000個)

 

結果:

(以下の画像は上段が入力画像、下段が出力画像です)

初期段階(epoch=1)

 

epoch=10

 

epoch=100

 

学習が進みにしたがい、Autoencoderの再現がうまく行くようになっている様子がわかります。

(AI開発用メモ) 17 Category Flower Datasetの準備

http://www.robots.ox.ac.uk/~vgg/data/flowers/17/

 

より、Dataset images をダウンロード。ファイル名は17flowers.tgz

 

展開すると、jpg/フォルダにimage_xxxx.jpg とfiles.txt*が生成される。

 

これを整理する。

 

まず、files.txt* をrm

 

次に、以下の内容の書かれたlabels.txtを作成。

 

1 80 Tulip
81 160 Snowdrop
161 240 LilyValley
241 320 Bluebell
321 400 Crocus
401 480 Iris
481 560 Tigerlily
561 640 Daffodil
641 720 Fritillary
721 800 Sunflower
801 880 Daisy
881 960 ColtsFoot
961 1040 Dandelion
1041 1120 Cowslip
1121 1200 Buttercup
1201 1280 Windflower
1281 1360 Pansy

 

次に、以下のsetup.pyを作成

 

import os
import shutil
import random

IN_DIR = 'jpg'
TRAIN_DIR = 'train_images'
TEST_DIR = 'test_images'

if not os.path.exists(TRAIN_DIR):
    os.mkdir(TRAIN_DIR)

if not os.path.exists(TEST_DIR):
    os.mkdir(TEST_DIR)

# name => (start idx, end idx)
flower_dics = {}

with open('labels.txt') as fp:
    for line in fp:
        line = line.rstrip()
        cols = line.split()

        assert len(cols) == 3

        start = int(cols[0])
        end = int(cols[1])
        name = cols[2]

        flower_dics[name] = (start, end)

# 花ごとのディレクトリを作成
for name in flower_dics:
    os.mkdir(os.path.join(TRAIN_DIR, name))
    os.mkdir(os.path.join(TEST_DIR, name))

# jpgをスキャン
for f in sorted(os.listdir(IN_DIR)):
    # image_0001.jpg => 1
    prefix = f.replace('.jpg', '')
    idx = int(prefix.split('_')[1])

    for name in flower_dics:
        start, end = flower_dics[name]
        if idx in range(start, end + 1):
            source = os.path.join(IN_DIR, f)
            dest = os.path.join(TRAIN_DIR, name)
            shutil.copy(source, dest)
            continue

# 訓練データの各ディレクトリからランダムに10枚をテストとする
for d in os.listdir(TRAIN_DIR):
    files = os.listdir(os.path.join(TRAIN_DIR, d))
    random.shuffle(files)
    for f in files[:10]:
        source = os.path.join(TRAIN_DIR, d, f)
        dest = os.path.join(TEST_DIR, d)
        shutil.move(source, dest)

 

 

JDLA Deep Learning for General 2019#1に合格

松尾豊氏が理事長をしている一般社団法人日本ディープラーニング協会

JDLA Deep Learning for General 2019#1

に合格しました。

 

ディープラーニング ジェネラリストを名乗れます。

 

ディープラーニング ジェネラリストは、

ディープラーニングの基礎知識を有し、

適切な活用方針を決定して

事業応用する能力をする人材

(日本ディープラーニング協会HPより)

 

とされています。

 

ディープラーニングG検定を受けてみた

昨年より、知的好奇心を満たすため、

ディープラーニング技術について勉強してます。

 

もともとは好奇心が動機ですが、

せっかくなので、

企業さんからのAI導入の相談にも乗れるよう、

体系的に勉強に取り組むことにしました。

 

そんなで、とりあえず今回、

ディープラーニングG検定(ジェネラリスト検定)を受けてみました。

 

日本でAIの牽引をしている松尾豊氏が理事をしている

日本ディープラーニング協会の検定試験です。

 

ディープラーニング「ジェネラリスト」は

 

ディープラーニングの基礎知識を有し、

適切な活用方針を決定して

事業応用する能力を持つ人材

(日本ディープラニング協会のHPより)

 

と定義されています。

 

試験内容は、技術的な内容から、歴史、社会、法律など、とても幅広いものでした。

(ていうか、公式テキストに載ってない試験内容が多かったやんけ)

 

合否の通知は3月15日までに来るとのこと。

 

このところ、知識のための勉強が多かったので、自分でディープラーニングのプログラムを書くのは休んでました。

 

試験も終わったので、またプログラム作りに励みます。

AI VAE(変分オートエンコーダ)

勉強メモ:

 

画像分野の深層生成モデルではVAEとGANがとりわけ良い。

VAEはVariational Autoencoder の略。

(GANについては本日は省略)

 

普通のオートエンコーダでは、入力と出力を同じにするように学習をし、隠れ層は入力データを圧縮表現したものである。

 

VAEでは、入力を固定された表現に圧縮するのではなく、統計分布に変換する(平均と文さんを表現するように学習する)。

入力データが何かの分布にしたがって生成されているものであると考えれば、その分布を表現するように学習をすればよい、というアプローチ。

 

VAEについて重要な参考文献は以下

  1. Tutorial to Variational Autoencoders: https://arxiv.org/pdf/1606.05908v2.pdf
  2. Variational Auto-Encoders and Extensions: http://dpkingma.com/wordpress/wp-content/uploads/2015/12/talk_nips_workshop_2015.pdf
  3. Variational Autoencoders Explained: http://kvfrans.com/variational-autoencoders-explained/
  4. Introduction to variational autoencoders: https://home.zhaw.ch/~dueo/bbs/files/vae.pdf

ものづくり補助金が公募中

ものづくり補助金が公募中です。

(*:正式名称「ものづくり・商業・サービス生産性向上促進補助金」ですが、通称「ものづくり補助金」と呼ばれています)

 

ものづくり補助金は、

中小企業・小規模事業者等が取り組む、生産性向上に資する革新的なサービス開発・試作品開発・生産プロセスの改善に必要な設備投資等を支援するもの

(中小企業団体中央会のHPより)

です。

 

補助額は最大で1,000万円です。

 

ものづくり補助金なんて自分の会社には関係ない、と思われるかもしれませんが、意外にこの補助金活用できます。

 

通称、「ものづくり補助金」と呼ばれていますが、ものづくり以外でも活用できます。

 

自社での活用の可能性については、お近くの専門家にご相談ください。

 

なお詳細は各都道府県の中小企業団体中央会のホームページをご覧ください(都道府県ごとに少しづつ違いますのご注意ください)。

 

愛知県はこちら⇒平成30年度補正「ものづくり・商業・サービス生産性向上促進補助金」について

 

静岡県はこちら⇒平成30年度補正「ものづくり・商業・サービス生産性向上促進補助金」の公募について

 

締切はH31年5月8日(電子申請は5月10日)

 

 

AI VGG-19

今日はメモ的なブログ記事です。

 

VGGー19はILSVRC2012のデータで7.5%のトップ5エラー率を実現した画像認識用のニューラルネットワーク。

学習済みモデルがBVLCのModelZooで公開されている。

このようなデープなモデルは、層を経るごとに入力データを抽象化していく。

途中でデータを抜き出すと、特徴を抽出したデータとして使うことができる。

また、文章生成RNNにつなぐことで、画像脚注付けもできる。

VGG-19以外にも、様々な公開モデルがある。

 

AI GAN(敵対的生成ネットワーク)

ディープラーニングのお勉強、

 

GAN(敵対的生成ネットワーク)について。

 

とりあえず、興味深いやつです。

 

この技術は、

 

生成AIと認識AIを戦わせて学習を進める方法です。

 

画像の生成を例にとると、

生成AIは、「本物っぽい」ニセモノ画像を作り出します。

そして、その画像を認識AIが本物かどうか判定します。

 

認識AIがニセモノと見破れば、生成AIはそれを学習して、

もっと本物っぽい画像を作るようにします.

 

認識AIがニセモノに騙されたら、

騙されたことを学習して、

次はもっと厳しく判定をします。

 

そんなイタチごっこをしながら学習をするのが、GANです。

 

で、やってみました。

 

 

MNISTの数字画像を使ってます。

 

学習の進行とともに生成画像がどんなふうになっていくか並べます。

 

 

 

 

 

 

最初のうちは「砂嵐」の画像だったものが、

学習が進むにつれて数字っぽくなっていってます。

 

今回は残念ながら「メモリ不足」で

クラッシュしてしまいました。

 

上↑の最後の画像がクラッシュ直前のものです。

 

学習を継続できればもっとはっきりとした文字を生成できるようになっていたものと思われます。