Suche senden
Hochladen
広告配信現場で使うSpark機械学習
•
62 gefällt mir
•
10,034 views
x1 ichi
Folgen
Using Apache Spark Machine Learning by advertising.
Weniger lesen
Mehr lesen
Ingenieurwesen
Melden
Teilen
Melden
Teilen
1 von 31
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
2015-11-17 きちんと知りたいApache Spark ~機械学習とさまざまな機能群
2015-11-17 きちんと知りたいApache Spark ~機械学習とさまざまな機能群
Yu Ishikawa
2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料
Recruit Technologies
GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた
GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた
Tetsuo Yamabe
Rユーザのためのspark入門
Rユーザのためのspark入門
Shintaro Fukushima
R超入門機械学習をはじめよう
R超入門機械学習をはじめよう
幹雄 小川
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
Kohei KaiGai
20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_Fdw
Kohei KaiGai
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
Katsushi Yamashita
Empfohlen
2015-11-17 きちんと知りたいApache Spark ~機械学習とさまざまな機能群
2015-11-17 きちんと知りたいApache Spark ~機械学習とさまざまな機能群
Yu Ishikawa
2014 11-20 Machine Learning with Apache Spark 勉強会資料
2014 11-20 Machine Learning with Apache Spark 勉強会資料
Recruit Technologies
GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた
GMO プライベート DMP で ビッグデータ解析をするために アプリクラウドで Apache Spark の検証をしてみた
Tetsuo Yamabe
Rユーザのためのspark入門
Rユーザのためのspark入門
Shintaro Fukushima
R超入門機械学習をはじめよう
R超入門機械学習をはじめよう
幹雄 小川
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
Kohei KaiGai
20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_Fdw
Kohei KaiGai
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
Katsushi Yamashita
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
Yu Ishikawa
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
Kazuaki Ishizaki
ML Pipelineで実践機械学習
ML Pipelineで実践機械学習
Kazuki Taniguchi
20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow
Kohei KaiGai
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京
tuchimur
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
Kazuaki Ishizaki
Parquetはカラムナなのか?
Parquetはカラムナなのか?
Yohei Azekatsu
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
Shintaro Fukushima
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
Koichi Hamada
問合せ最適化インサイド
問合せ最適化インサイド
Takahiro Itagaki
JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ
JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ
Holden Karau
Hivemallで始める不動産価格推定サービス
Hivemallで始める不動産価格推定サービス
Kentaro Yoshida
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリ
Satoshi Kitajima
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Yasuyuki Sugai
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
Toshihiro Kamishima
Why dont you_create_new_spark_jl
Why dont you_create_new_spark_jl
Shintaro Fukushima
Hive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみた
Recruit Technologies
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom
Kohei KaiGai
Project Tungsten Bringing Spark Closer to Bare Meta (Hadoop / Spark Conferenc...
Project Tungsten Bringing Spark Closer to Bare Meta (Hadoop / Spark Conferenc...
Hadoop / Spark Conference Japan
Sparkを用いたビッグデータ解析 〜 前編 〜
Sparkを用いたビッグデータ解析 〜 前編 〜
x1 ichi
競馬の格言を地方競馬で検証してみた
競馬の格言を地方競馬で検証してみた
x1 ichi
Weitere ähnliche Inhalte
Was ist angesagt?
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
Yu Ishikawa
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
Kazuaki Ishizaki
ML Pipelineで実践機械学習
ML Pipelineで実践機械学習
Kazuki Taniguchi
20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow
Kohei KaiGai
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京
tuchimur
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
Kazuaki Ishizaki
Parquetはカラムナなのか?
Parquetはカラムナなのか?
Yohei Azekatsu
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
Shintaro Fukushima
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
Koichi Hamada
問合せ最適化インサイド
問合せ最適化インサイド
Takahiro Itagaki
JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ
JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ
Holden Karau
Hivemallで始める不動産価格推定サービス
Hivemallで始める不動産価格推定サービス
Kentaro Yoshida
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリ
Satoshi Kitajima
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Yasuyuki Sugai
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
Toshihiro Kamishima
Why dont you_create_new_spark_jl
Why dont you_create_new_spark_jl
Shintaro Fukushima
Hive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみた
Recruit Technologies
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom
Kohei KaiGai
Project Tungsten Bringing Spark Closer to Bare Meta (Hadoop / Spark Conferenc...
Project Tungsten Bringing Spark Closer to Bare Meta (Hadoop / Spark Conferenc...
Hadoop / Spark Conference Japan
Was ist angesagt?
(20)
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
ML Pipelineで実践機械学習
ML Pipelineで実践機械学習
20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow
Oracle Cloud Developers Meetup@東京
Oracle Cloud Developers Meetup@東京
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
Parquetはカラムナなのか?
Parquetはカラムナなのか?
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
[データマイニング+WEB勉強会][R勉強会] はじめてでもわかる 統計解析・データマイニング R言語入門
問合せ最適化インサイド
問合せ最適化インサイド
JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ
JP version - Beyond Shuffling - Apache Spark のスケールアップのためのヒントとコツ
Hivemallで始める不動産価格推定サービス
Hivemallで始める不動産価格推定サービス
データサイエンティスト必見!M-1グランプリ
データサイエンティスト必見!M-1グランプリ
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
科学技術計算関連Pythonパッケージの概要
科学技術計算関連Pythonパッケージの概要
Why dont you_create_new_spark_jl
Why dont you_create_new_spark_jl
Hive on Spark の設計指針を読んでみた
Hive on Spark の設計指針を読んでみた
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom
Project Tungsten Bringing Spark Closer to Bare Meta (Hadoop / Spark Conferenc...
Project Tungsten Bringing Spark Closer to Bare Meta (Hadoop / Spark Conferenc...
Andere mochten auch
Sparkを用いたビッグデータ解析 〜 前編 〜
Sparkを用いたビッグデータ解析 〜 前編 〜
x1 ichi
競馬の格言を地方競馬で検証してみた
競馬の格言を地方競馬で検証してみた
x1 ichi
女性エンジニアの1週間
女性エンジニアの1週間
x1 ichi
本当にあったApache Spark障害の話
本当にあったApache Spark障害の話
x1 ichi
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Junichi Noda
あなたのScalaを爆速にする7つの方法
あなたのScalaを爆速にする7つの方法
x1 ichi
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
x1 ichi
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
Future Of Data Japan
MillWheel Fault-Tolerant Stream Processing at Internet Scaleの意訳
MillWheel Fault-Tolerant Stream Processing at Internet Scaleの意訳
x1 ichi
解説: a semantic approach to recommending text advertisements for images
解説: a semantic approach to recommending text advertisements for images
x1 ichi
バッチではじめてAkkaを使ってみた (refined)
バッチではじめてAkkaを使ってみた (refined)
Koji Agawa
Kafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnight
Kafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnight
Yahoo!デベロッパーネットワーク
Apache Atlasの現状とデータガバナンス事例 #hadoopreading
Apache Atlasの現状とデータガバナンス事例 #hadoopreading
Yahoo!デベロッパーネットワーク
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
Kazuki Taniguchi
Top 5 mistakes when writing Spark applications
Top 5 mistakes when writing Spark applications
hadooparchbook
Spark Streaming の基本とスケールする時系列データ処理 - Spark Meetup December 2015/12/09
Spark Streaming の基本とスケールする時系列データ処理 - Spark Meetup December 2015/12/09
MapR Technologies Japan
Apache Spark 1000 nodes NTT DATA
Apache Spark 1000 nodes NTT DATA
NTT DATA OSS Professional Services
Spark GraphFrames のススメ
Spark GraphFrames のススメ
Nagato Kasaki
「HTML5」における動画DRMのゆくえとか
「HTML5」における動画DRMのゆくえとか
Teiichi Ota
AWS Lambdaによるデータ処理理の⾃自動化とコモディティ化
AWS Lambdaによるデータ処理理の⾃自動化とコモディティ化
Amazon Web Services Japan
Andere mochten auch
(20)
Sparkを用いたビッグデータ解析 〜 前編 〜
Sparkを用いたビッグデータ解析 〜 前編 〜
競馬の格言を地方競馬で検証してみた
競馬の格言を地方競馬で検証してみた
女性エンジニアの1週間
女性エンジニアの1週間
本当にあったApache Spark障害の話
本当にあったApache Spark障害の話
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築
あなたのScalaを爆速にする7つの方法
あなたのScalaを爆速にする7つの方法
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
MillWheel Fault-Tolerant Stream Processing at Internet Scaleの意訳
MillWheel Fault-Tolerant Stream Processing at Internet Scaleの意訳
解説: a semantic approach to recommending text advertisements for images
解説: a semantic approach to recommending text advertisements for images
バッチではじめてAkkaを使ってみた (refined)
バッチではじめてAkkaを使ってみた (refined)
Kafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnight
Kafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnight
Apache Atlasの現状とデータガバナンス事例 #hadoopreading
Apache Atlasの現状とデータガバナンス事例 #hadoopreading
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
Top 5 mistakes when writing Spark applications
Top 5 mistakes when writing Spark applications
Spark Streaming の基本とスケールする時系列データ処理 - Spark Meetup December 2015/12/09
Spark Streaming の基本とスケールする時系列データ処理 - Spark Meetup December 2015/12/09
Apache Spark 1000 nodes NTT DATA
Apache Spark 1000 nodes NTT DATA
Spark GraphFrames のススメ
Spark GraphFrames のススメ
「HTML5」における動画DRMのゆくえとか
「HTML5」における動画DRMのゆくえとか
AWS Lambdaによるデータ処理理の⾃自動化とコモディティ化
AWS Lambdaによるデータ処理理の⾃自動化とコモディティ化
Ähnlich wie 広告配信現場で使うSpark機械学習
HBaseとSparkでセンサーデータを有効活用 #hbasejp
HBaseとSparkでセンサーデータを有効活用 #hbasejp
FwardNetwork
DB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data Platform
Daiyu Hatakeyama
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Yuji Kanemoto
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
Yuji Takayama
Aaなゲームをjsで
Aaなゲームをjsで
Moriyoshi Koizumi
Aaなゲームをjsで
Aaなゲームをjsで
Moriyoshi Koizumi
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
Kazuki Nakajima
Visualforce + jQuery
Visualforce + jQuery
Salesforce Developers Japan
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
Taisuke Fukuno
Azure DataLake 大全
Azure DataLake 大全
Daiyu Hatakeyama
Parse触ってみた
Parse触ってみた
Naoya Harasawa
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
Yuji Takayama
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
decode2016
Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用
stomita
TerraformでECS+ECRする話
TerraformでECS+ECRする話
Satoshi Hirayama
実動するIot&hadoopから学ぶ会_資料
実動するIot&hadoopから学ぶ会_資料
FwardNetwork
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
Yuji Takayama
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Preferred Networks
Ähnlich wie 広告配信現場で使うSpark機械学習
(20)
HBaseとSparkでセンサーデータを有効活用 #hbasejp
HBaseとSparkでセンサーデータを有効活用 #hbasejp
DB TechShowcase Tokyo - Intelligent Data Platform
DB TechShowcase Tokyo - Intelligent Data Platform
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Alteryxの空間分析で学ぶ、最寄りの指定緊急避難場所と低水位地帯 Developers.IO Tokyo 2019
Data apiで実現 進化するwebの世界
Data apiで実現 進化するwebの世界
Aaなゲームをjsで
Aaなゲームをjsで
Aaなゲームをjsで
Aaなゲームをjsで
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
勉強会force#4 Chatter Integration
勉強会force#4 Chatter Integration
Visualforce + jQuery
Visualforce + jQuery
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
Azure DataLake 大全
Azure DataLake 大全
Parse触ってみた
Parse触ってみた
初めての Data api cms どうでしょう - 大阪夏の陣
初めての Data api cms どうでしょう - 大阪夏の陣
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
DBP-020_いざ無制限のデータの彼方へ! ~Azure Data Lake 開発の知識とベストプラクティス~
Apexコアデベロッパーセミナー070726 配布用
Apexコアデベロッパーセミナー070726 配布用
TerraformでECS+ECRする話
TerraformでECS+ECRする話
実動するIot&hadoopから学ぶ会_資料
実動するIot&hadoopから学ぶ会_資料
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
広告配信現場で使うSpark機械学習
1.
広告配信現場で使う Spark機械学習 株式会社サイバーエージェント 井上ゆり
2.
自己紹介> 井上 ゆり 株式会社サイバーエージェント アドテク本部 AMoAd所属 twitter:
@iyunoriue GitHub: x1- HP: バツイチとインケンのエンジニアブログ http://x1.inkenkun.com/ 2
3.
本日は広告屋らしく、 Apache Sparkを使った CTR(=Click Through
Rate)推定 をご紹介させて頂きます。 3
4.
2014年、Criteo社が Hashing Trickとロジスティック回帰 を使ったCTR推定を発表しました。 この論文→http://people.csail.mit.edu/romer/papers/TISTRespPredAds.pdf ! ! 今回はこの手法を使います。 4
5.
CTR推定の流れ Pipeline 5 読み込み & パース 特徴ベクトル に変換 学習 検証 CSVファイル Hashing
Trick Logistic Regression spark-csv Cross Validator SQL/DataFrame Apache Spark 1 2 3 4
6.
使うもの ★ Apache Spark •
SparkSQL & DataFrame ・・・データ操作/加工 • Spark MLlib • Pipeline ・・・ワークフロー • HashingTrick ・・・特徴のベクトル化、次元削減 • LogisticRegression ・・・ロジスティック回帰 • CrossValidator ・・・最適モデルの選択 ★ databricks/spark-csv ・・・CSVパーサ 6
7.
推定に使うデータ KaggleのCTR推定コンテストで使われた テストデータを使います。 https://www.kaggle.com/c/avazu-ctr-prediction/data ! 7
8.
データ構造 8 • id: ad
identifier • click: 0/1 for non-click/click • hour: YYMMDDHH • C1 -- anonymized categorical variable • banner_pos • site_id • site_domain • site_category • app_id • app_domain • app_category • device_id • device_ip • device_model • device_type • device_conn_type • C14-C21 -- anonymized categorical variables
9.
PipelineSQL/DataFrame Apache Spark 9 読み込み & パース 特徴ベクトル に変換 学習 検証 CSVファイル
Hashing Trick Logistic Regression spark-csv Cross Validator 3 4 CSVの読み込み&パース 21
10.
! databricks/spark-csvを使ってCSVを読み込みます。 これを使うと、ヘッダーとカラム名が対応した DataFrameを作ることができます。 こんなかんじ。 10 id click hour
C1 banner_pos app_id site_id ... 1 0 2015080106 abc 9 9 5 ... 2 0 2015080106 def 5 10 10 ... 3 1 2015080107 ghi 1 2 2 ... 4 0 2015080107 jkl 0 5 6 ... CSVの読み込み&パース
11.
11 val rawCsv =
sqlContext.read .format( "com.databricks.spark.csv" ) .option( "header", "true" ) .load( "/var/kaggle-data/train*.gz" ) ソースコードはこんなかんじです。 ※scalaを使っています CSVの読み込み&パース
12.
PipelineSQL/DataFrame Apache Spark 12 読み込み & パース 特徴ベクトル に変換 学習 検証 CSVファイル
Hashing Trick Logistic Regression spark-csv Cross Validator 3 4 特徴ベクトルに変換 1 2
13.
! DataFrameに読み込んだCSVは、Hashing Trickにかけ ロジスティック回帰モデルで訓練するために少し加工 します。 クリックされたかどうかを目的変数(=label)とし、 その他の項目を説明変数(=特徴)とします。 13 特徴ベクトルに変換 id click
hour C1 banner_pos app_id site_id ... 1 0 2015080106 abc 9 9 5 ... 2 0 2015080106 def 5 10 10 ... 3 1 2015080107 ghi 1 2 2 ... 4 0 2015080107 jkl 0 5 6 ... 目的変数 説明変数
14.
この数値も文字列も含む特徴から Hashing Trickを使って 特徴ベクトルをつくりたいのですが・・・ 14 特徴ベクトルに変換
15.
! Hashing Trickを行う際に、このままのデータだと 少し困ったことになります。 ! 例えば site_id=10, app_id=10,
banner_pos=9, .. というレコードの特徴は下記のようになるので (10, 10, 9, ..) ! site_idを表す10とapp_idを表す10の 区別がなくなってしまいます。 15 特徴ベクトルに変換
16.
! そこで site_id=10 → site_id:10 app_id=10
→ app_id:10 のように 項目名を値に付与することで特徴として区別します。 ! (10, 10, 9, ..) ↓ (site_id:10, app_id:10, banner_pos:..) 16 特徴ベクトルに変換
17.
17 日付は、時刻部分だけを特徴として使いたいので時刻 を取り出すUDFも作成します。 val f =
udf { (v:String, prefix:String ) => s"$prefix:$v" } ! UDF(=UserDefinedFunction)を作成して DataFrameを加工します。 ! 項目名と値を結合するUDFはこんなかんじです。 val hour = udf { (v:String ) => v slice( 6, 8 ) } 特徴ベクトルに変換
18.
18 val data =
rawCsv.select( $"id", $"click".cast( DoubleType ).as( "label" ), array( f( hour( $"hour" ), lit( "hour" ), f( $"C1", lit( "C1" ), f( $"banner_pos", lit( "banner_pos" ), f( $"site_id", lit( "site_id" ), f( $"site_domain", lit( "site_domain" ), f( $"site_category", lit( "site_category" ), : f( $"C21", lit( "C21" ) ) ).as( "text" ) ) ! 先ほどのUDFを使ってDataFrameを加工し、訓練データ を準備します。 特徴ベクトルに変換
19.
PipelineSQL/DataFrame Apache Spark 19 読み込み & パース 特徴ベクトル に変換 学習 検証 CSVファイル
Hashing Trick Logistic Regression spark-csv Cross Validator 4 学習 1 2 3
20.
! 訓練データの準備ができたので Pipelineを使って HashingTrickによる特徴のベクトル化 〜ロジスティック回帰による確率推定 のフローを組み立てます。 20 学習
21.
! 今回使う • Hashing Trick •
LogisticRegression をPipelineStageとしてPipelineに渡します。 21 val hashingTF = new HashingTF() .setNumFeatures( 1000 ) .setInputCol( "text" ) .setOutputCol( "features" ) ! val lr = new LogisticRegression() .setMaxIter( 10 ) .setRegParam( 0.1 ) ! val pipeline = new Pipeline().setStages( Array( hashingTF, lr ) ) 学習
22.
PipelineStage ! 後は先ほど準備した訓練データをPipelineに fitさせるだけです。 22 val model =
pipeline.fit( train ) PipelineはHashing Trickとロジスティック回帰を 順次実行します。 Pipeline Hashing Trick Logistic Regression DataFrame (site_id:10, app_id: 10,..), (.. 学習
23.
! 学習済みのモデルにテストデータを渡すと probability(確率)がベクトルで出てきます。 probabilityベクトルのインデックス1番目が clickされる確率を表します。 23 model.transform( test ).select( $"label", $"prediction", v0(
$"probability" ).as( "probability0" ), v1( $"probability" ).as( "probability1" ) ).take(10).foreach ( predictPrint ) label:0.0, predict:0.0, v(0):0.8720480148381256, v(1):0.1279519851618744 label:1.0, predict:0.0, v(0):0.7926627870942957, v(1):0.2073372129057043 label:1.0, predict:1.0, v(0):0.4711335790138061, v(1):0.5288664209861939 label:1.0, predict:1.0, v(0):0.4756467107691264, v(1):0.5243532892308737 : ↑probability(1)>0.5の場合に1.0と推定されているのがわかります。 学習 CTR
24.
PipelineSQL/DataFrame Apache Spark 24 読み込み & パース 特徴ベクトル に変換 学習 検証 CSVファイル
Hashing Trick Logistic Regression spark-csv Cross Validator 検証 1 2 3 4
25.
! Spark MLlibには、交差検証を使って モデルに最適なパラメータを選択するための 仕組みがあります。 最後にこれを使って パラメータのチューニングを行います。 25 検証
26.
先ほどのPipelineをCrossValidatorに渡して CrossValidatorモデルを作成します。 26 val crossval =
new CrossValidator() .setEstimator( pipeline ) .setEvaluator( new RegressionEvaluator ) 検証
27.
検証したいパラメータ・グリッドを作成します。 27 val paramGrid =
new ParamGridBuilder() .addGrid( hashingTF.numFeatures, Array(10, 1000) ) .addGrid( lr.regParam, Array(0.1, 0.001) ) .addGrid( lr.maxIter, Array(10, 100) ).build() ↑この例では2×2×2=8回の試行が行われて 最適パラメータが決定します。 ※つまり結構な時間がかかります。 検証
28.
先ほど作成したパラメータ・グリッドと fold数(訓練データ対テストデータの分割数)を渡して 訓練を開始します。 28 crossval.setEstimatorParamMaps( paramGrid ) crossval.setNumFolds(
3 ) ! val cvModel = crossval.fit( train ) 検証
29.
訓練が完了したら最適モデルを取り出して 最適パラメータを確認することができます。 29 val parent =
cvModel.bestModel.parent.asInstanceOf[Pipeline] val bestHT = parent.getStages(0).asInstanceOf[HashingTF] val bestLR = parent.getStages(1).asInstanceOf[LogisticRegression] ! println(s"numFeatures: ${bestHT.getNumFeatures}") println(s"regParam: ${bestLR.getRegParam}") println(s"maxIter: ${bestLR.getMaxIter}") numFeatures: 1000 regParam: 0.001 maxIter: 100 このモデルを使って推定もできます。 →動的なパラメータ・チューニングが可能! 検証
30.
ソースコードは下記に公開しています。 https://github.com/x1-/spark-example/blob/master/src/main/ scala/com/inkenkun/x1/spark/examples/ml/HashingTrickLR.scala 30
31.
ご清聴ありがとうございました。
Jetzt herunterladen