質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

224閲覧

機械学習を利用した開発について

nobodytolove123

総合スコア61

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

3クリップ

投稿2019/09/10 08:14

編集2019/09/10 11:13

概要

お世話になります。

現在、機械学習システムを利用したAPI開発についての調査を行っています。

私はまだ機械学習について何の知見も持っていません。

課題を解決するのにどの機械学習アルゴリズムを使用すればいいのか

また開発を進めて行く上でデータの用意や前処理などで気を付けたほうがいいことなどを
ご教授いただければと思います。

現状、僕の方ではscikit-learnで提供されているsklearn.neighborsの使用を検討していますが
どれが最適解かわかっていません。

解決したい問題

下記の様なCSVデータをもとにモデルを学習し、
未知のデータを入力として渡されたときに、類似したデータを出力するシステムを考えています。

CSVデータはPlayStation®3のソフトを扱うことを想定しています。

項目名説明
name商品名
age対象年齢
gender対象性別
genre種類
price価格
datetime発売日時
  • 行(例)
METAL GEAR SOLID,15-,male,action,3480,2011-11-10 ウイニングイレブン 2016,6-,male,sports,6600,2015-10-01

上記の様なCSVデータが300行あります。

例えば上記のCSVデータをもとに学習したモデルに下記のCSVデータを
入力として与えたときに類似データを候補として数個挙げてくれるシステムを目標としています。

  • name以外の特徴を与える。

in.csv

16-,male,sports,6600,2015-10-01
  • 類似データを出力する。

out.csv

11,ウイニングイレブン 2016 22,FIFA 16 33,プロ野球スピリッツ

上記の問題を解決するために調査して分かったこと

僕が調べた結果、下記の事が分かりました。

  • プログラムを使って、データから共通点を見つけ出すアプローチとして機械学習、ディープラニングが挙げられる。

    • 機械学習は人間が正解を教えてあげることで、モデルが学習していく。
    • ディープラーニングではモデルが正解を自動で見つけ出す。
    • ディープラーニングは機械学習に比べて複雑で、ブラックボックスになりやすい。
  • 機械学習には大きく分けて、教師あり学習、教師なし学習、強化学習が挙げられる。

    • 教師あり学習では人間によって正解があらかじめモデルに与えられている。
    • 教師なし学習では正解は与えられず、機械がデータを自動でグループ分けする。
  • 教師あり学習では、一般的にデータの分類問題、予測問題を解決できる。

  • 類似データの推論には、クラス分類、クラスタリング手法が挙げられる。

    • 類似データの推論には、k近傍法が使用されることがある。
  • 学習データには、数値のみ使用できるため、データの前処理が必要になる。

上記が調べてみて、ふわっと理解できたことです。

機械学習も複雑なシステムであると思うので、出来れば使用するアルゴリズムが
どの様なものであるか知って起きたいと思っています(数式レベルで)。

なので無暗にPoCするのではなく、先にアルゴリズムを決めてから調査、PoCを行いたいです。

現状、機械学習の教師あり学習のk最近旁アルゴリズムを利用して開発したいと考えています。

伝えたいこと

  • 類似データの分類に使用するアルゴリズムをご教授頂きたい。
  • データ前処理、デバック、アルゴリズムのドキュメント等、開発を行う上で必用なノウハウをご教授頂きたい。

とても投げやりなってしまい、申し訳ございません。
僕自身調査を進めて行こうと思いますが、機械学習を利用したことがないので、どれが最善なのか分かりません。

ご教授の程、お願い致します。

Danrussia👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

k近傍法は深層学習ではないので、TensorFlowでは極めて不向きです。scikit-learnならk近傍法の実装もありますが、恐らくやりたいこととは違うでしょう。


未知のデータを入力として渡されたときに、類似したデータを出力するシステムを考えています。

ということであれば、情報検索系のアルゴリズムを調べたほうが良いと思います。機械学習的な技術も使う可能性はありますが、必須ではありません。

投稿2019/09/10 08:40

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobodytolove123

2019/09/10 09:57

ご回答ありがとうございます! 恐れ入りますが、回答について少し質問と認識合わせをさせて下さい。 > scikit-learnならk近傍法の実装もありますが、恐らくやりたいこととは違うでしょう。 > 情報検索系のアルゴリズムを調べたほうが良いと思います。機械学習的な技術も使う可能性はありますが、必須ではありません。 類似データを取得する問題を解決する手法として、分類的な手法ではなく検索的な手法があっているという認識でよろしいでしょうか。
nobodytolove123

2019/09/10 10:41 編集

ありがとうございます。 検索アルゴリズムについて、軽く調べて見ましたが申し訳ございません、よくわかりませんでした。 検索していると、近傍探索というワードをよく見かけたのですが、近傍探索は情報検索アルゴリズムの一種という認識であっていますか? 補足: 自分が調べた限り、最近傍法を最適化したのが近傍探索という理解をしました。
hayataka2049

2019/09/10 12:40

情報検索については、この本などがけっこうおすすめです。先にざっくり全体像を掴んでおくと良いかと。 https://www.kyoritsu-pub.co.jp/bookdetail/9784320123229 一番ナイーブな実装だと適当に類似度か距離を調べればできる訳ですが、最適化しようとすると近傍探索などの手法を用いることになると思います。 レコードがたかだか数百件で更新頻度も低いのであれば、予め類似度・距離を計算しておいてナイーブに全探索してもさほど問題はないかと思います。
nobodytolove123

2019/09/10 13:26 編集

ありがとうございます、本買ってみます! k近傍法はユークリッド距離が最も近い物を選ぶアルゴリズムだと考えているので、ナイーブな実装としてk近傍法が挙げられるという解釈でいいですかね? データは8万件ほどありますね。 ひとつお伺いしたいのですが、情報検索とk近傍法での実装を比較した時に、正解率の高さや処理速度の性能などは情報検索の方が高いですか? 補足: セキュリティ的にあまりデータの公開はしたくないので、特徴が似たゲームのデータをサンプルとして掲載しました、実際は8万件ほどあります。
hayataka2049

2019/09/10 13:34

k近傍法は分類アルゴリズムなので、類似サンプルを探したいという今回のとは近傍探索を使う以上の共通点はありません。忘れてください。
nobodytolove123

2019/09/10 13:55

すみません、勉強不足なもので、一旦忘れます。 少し理解出来ました、そうなると機械学習フレームワークに分類させるのではなく、自分で類似度や距離を測る関数をPythonで作る必要が出てくると思いますが、合っていますか?
hayataka2049

2019/09/10 14:07

最悪そうなります。近傍探索を効率よく実装しているライブラリとかあったら使いたいところです(どういうのがあるのか把握していないので、使いたければご自身でお調べください。)。
nobodytolove123

2019/09/10 14:22

了解致しました、ありがとうございます。 わざわざ遅くまでありがとうございました。 本当に助かりました、また何かあれば宜しくお願いいたします。
guest

0

解決済みですがコメントを残しておきます。

質問に記載のやりたいことから、レコメンデーションモデルがいいかと感じました。これはamazonなどのECサイトでみかける「お薦め」をリストアップするものです。
レコメンデーションモデルのアプローチ方法にはいろいろあります。そのひとつに質問に記載のあるようなアイテムベースがあります。ざっくりいうと選択したアイテムと類似するものを識別するという考え方です。この場合のベースになるアルゴリズムとしてk近傍法があるので、nobadytolove123さんの発想はそれほど筋の悪いものではないと考えます。

このアイテムベースはユーザーは常に似ているアイテムを購入するという前提に立っており、ユーザーの趣味嗜好が考慮されていません。そこで考案されたものがユーザーベースで、購買履歴からユーザーと趣味嗜好が近似するユーザーを識別して頻度の高いアイテムを決定するというものです。

このふたつの方法は組み合わせが可能で、レコメンデーションモデルというとこのアイテムベースとユーザーベースを組み合わせたものをいうようです。

他にもバスケット分析を応用するものや自然言語処理のひとつであるトピックモデルを応用するものなどもあります。

投稿2019/09/10 11:19

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobodytolove123

2019/09/10 11:30

ご回答ありがとうございます! まさにレコメンデーション機能の様なものを考えていました。 ただ今回の機能では、過去の類似データをピックアップして、それが選択された場合、それをExcelの表に張り付けるような機能なのでユーザの趣味嗜好を考慮する必要がありません。 なのでアイテムベースの考え方が、今回の機能に一番はまっているかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問