2015年8月10日月曜日

Kaggleに挑戦 その1

kaggleというデータ解析コンペに挑戦する。

https://www.kaggle.com/c/coupon-purchase-prediction
リクルート社ポンパレのデータが公開されているので
そのデータからお客さんがどのクーポンを買うか予測するってもの。


やってみる。

眠いので調査ははしょりはしょり

pythonの準備
ライブラリはnumpy, pandas, matplotlib
R使おうと思ったけどなんだかpythonのほうがやりやすかったので
勉強がてら使ってみた
Rでもいいんだけどね。


user_list.csvから

まず女性ユーザーの年齢分布

  • 30〜40代多し
  • 40代前半と20代後半多し

※なぜか男性の分布がプロットできねー!

次 都道府県別ユーザー数
  • 東京、神奈川、大阪 多い

user_list.csvからは大して傾向はつかめないことはわかった。
そもそも登録日、性別、解除日、県名くらいじゃ性質なんてわからないだろうね。


たいした収穫はないが、user_list.csvからはたいしたことがわからないことがわかったなり。



メモ

  • coupon_detail_train.csv   購入したクーポンについてのログ
  • coupon_visit_train.csv    閲覧したクーポンについてのログ

2014年9月27日土曜日

Lucene JapaneseTokenizerで文章分割

テスト
package test;

import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;

import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.ja.JapaneseTokenizer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;

public class TestClass {
 static final String SENTENCE = "今日は天気がいい。";
 public static void main(String[] args) {
  // TODO 自動生成されたメソッド・スタブ
  Reader reader = new StringReader(SENTENCE);
  System.out.println(SENTENCE);
  TokenStream stream = new JapaneseTokenizer(reader, null, true, JapaneseTokenizer.Mode.NORMAL);
  try {
   stream.reset();
   while (stream.incrementToken()) {
       CharTermAttribute term = stream.getAttribute(CharTermAttribute.class);
       System.out.println(term.toString());
   }
  } catch (IOException e) {
   // TODO 自動生成された catch ブロック
   e.printStackTrace();
  }
 }
}

2014年7月27日日曜日

Apache Sparkを使ってみた

ダウンロード

ここの
 http://spark.apache.org/downloads.html
からダウンロード
gitまだよくしらないので All Release と書いてある下の Spark1.0.1をダウンロードしてきた。

解凍

解凍する

tar xvzf spark-1.0.1.tgz 

ずらーっと解凍される。

ビルド

どうしたらいいのかわからないのでREADME.md読むと
./sbt/sbt assembly と書いてあるのでビルドする。

./sbt/sbt assembly

けっこう時間かかってる。(今ここ)



・・・・そしてあきらめた。


2014年4月20日日曜日

Solr を Tomcatで動かす

Solr を Tomcatで動かすときにぶつかった問題と解決。

SolrとTomcatの連携はすでにいろんなブログに書かれてるので省略します。

Solr Tomcatとかで探してみて。

参考
http://www.soum.co.jp/misc/toza/apache-solr/1.html
とか参考にして


でこのようにやったのに http://****:8080/solrで動かず
こんなエラーがでた

4 17, 2014 12:00:06 午前 org.apache.catalina.core.StandardContext filterStart
SEVERE: フィルタ SolrRequestFilter の起動中の例外です
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
        at org.apache.solr.client.solrj.impl.HttpClientUtil.<clinit>(HttpClientUtil.java:78)
        at org.apache.solr.servlet.SolrDispatchFilter.<init>(SolrDispatchFilter.java:120)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
        at java.lang.Class.newInstance0(Class.java:374)
        at java.lang.Class.newInstance(Class.java:327)
        at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:140)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1073)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)

        ... 25 more

4 17, 2014 12:37:04 午前 org.apache.catalina.core.StandardContext filterStart
SEVERE: フィルタ SolrRequestFilter の起動中の例外です
java.lang.NoClassDefFoundError: org/apache/log4j/Level
        at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128)
        at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:107)
        at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:295)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)
        at org.apache.solr.client.solrj.impl.HttpClientUtil.<clinit>(HttpClientUtil.java:78)
        at org.apache.solr.servlet.SolrDispatchFilter.<init>(SolrDispatchFilter.java:120)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
        at java.lang.Class.newInstance0(Class.java:374)
        at java.lang.Class.newInstance(Class.java:327)
        at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:140)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1073)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)

        ... 30 more

4 18, 2014 11:55:54 午後 org.apache.catalina.core.StandardContext filterStart
SEVERE: フィルタ SolrRequestFilter の起動中の例外です
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
        at org.apache.http.impl.client.CloseableHttpClient.<init>(CloseableHttpClient.java:60)
        at org.apache.http.impl.client.AbstractHttpClient.<init>(AbstractHttpClient.java:271)
        at org.apache.http.impl.client.DefaultHttpClient.<init>(DefaultHttpClient.java:127)
        at org.apache.http.impl.client.SystemDefaultHttpClient.<init>(SystemDefaultHttpClient.java:116)
        at org.apache.solr.client.solrj.impl.HttpClientUtil.createClient(HttpClientUtil.java:112)
        at org.apache.solr.servlet.SolrDispatchFilter.<init>(SolrDispatchFilter.java:120)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
        at java.lang.Class.newInstance0(Class.java:374)
        at java.lang.Class.newInstance(Class.java:327)
        at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:140)
        at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)
        at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
        at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4809)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5485)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:632)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1073)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)

        ... 29 more

とかこんな感じのログ

解決方法

solrのパッケージのlibにこんなの入ってる
$ ll solr-4.7.0/example/lib/ext/
合計 540
-rw-r--r-- 1 suganuma suganuma  17289  6月 11 16:43 2012 jcl-over-slf4j-1.6.6.jar
-rw-r--r-- 1 suganuma suganuma   4955  6月 11 16:43 2012 jul-to-slf4j-1.6.6.jar
-rw-r--r-- 1 suganuma suganuma 481535  3月 31 06:25 2010 log4j-1.2.16.jar
-rw-r--r-- 1 suganuma suganuma  26176  6月 11 16:41 2012 slf4j-api-1.6.6.jar
-rw-r--r-- 1 suganuma suganuma   9711  6月 11 16:42 2012 slf4j-log4j12-1.6.6.jar

これら5このjarファイルを
tomcatのwebappのlibにおきました。

こういうところ
/usr/local/tomcat/7.0.53/webapps/solr/WEB-INF/lib/

そんで解決!!!

2013年5月26日日曜日

Lucene のgetTermFreqVectorはもう使えてないお。。。

あるドキュメントにどんなタームがいくつあるかを探して来て、
機械学習でカテゴリ分類をやりたいと思ってる。

getTermFreqVector を使うと簡単みたいなのを見つけた。

http://lucene.jugem.jp/?eid=178

でもさ、これlucene3.5くらいから使えなくなってるんだよね。。。


stackoverflowにまさにこんなスレッドを見つけた。

http://stackoverflow.com/questions/12098083/term-vector-frequency-in-lucene-4-0


でなんとかかんとか getTermVector()を使ってみた。
setStoreTermVectors と setStoreTermVectorPositionsが必要とわからなくて
すげー時間取られた。


---------------------------------------------

"安倍晋三首相が26日、ミャンマーのテイン・セイン大統領との首脳会談で、ミャンマーの民主化や法の支配を強化する方針を強調したのは、台頭する中国をけん制する狙いがある。首相は昨年12月の就任後から中国の周辺国を積極的に訪れており、周辺各国との経済関係の強化をテコに中国の包囲網を築きたい考えだ。";

---------------------------------------------

大統領 : 1
支配 : 1
ミャンマ : 2
化 : 1
的 : 1
法 : 1
積極 : 1
安倍 : 1
後 : 1
12 : 1
セイン : 1
会談 : 1
網 : 1
強化 : 2
築く : 1
経済 : 1
狙い : 1
民主 : 1
中国 : 3
周辺 : 2
首相 : 2
包囲 : 1
けん制 : 1
昨年 : 1
晋 : 1
強調 : 1
就任 : 1
各国 : 1
おる : 1
26 : 1
首脳 : 1
関係 : 1
訪れる : 1
月 : 1
三 : 1
テコ : 1
方針 : 1
日 : 1
国 : 1
考え : 1
台頭 : 1
テイン : 1

---------------------------------------------


うむこれでカテゴリ分類機を作れそうだ。

crazybotをpythonで書き直してみた

アルゴリズムの勉強で「最強最速アルゴリズマー」をよんでる

そんでCrazyBotの問題をpythonで書き直してみた。
深さ優先探索ってすごいね。



クラス変数・関数を扱う時 cls.***と使うのを初めて知った。


rubyで書いてみたいけどもうギブアップ。。。

2013年5月12日日曜日

集合知プログラミング はすげーいい! So excellant book, Programming Collective Intelligence

オライリーで機械学習系の本は多々あるけど
集合知プログラミングはすごくいい本だ

ソースコードもでてるからいいね


Programming Collective Intelligence
this book is awesome excellant book.

you can find source code here

http://shop.oreilly.com/product/9780596529321.do

find it in right side-bar as Download example code.