データサイエンス

データサイエンスの専門家、機械学習の専門家、およびこの分野に関する知識が豊富な方へ

1
非数値データに基づいて重複IDを集約するためのアルゴリズム?
私は人の大規模なデータセット(2Mエントリ)を持っていますが、多くの人がわずかに(または大幅に)異なる識別情報を持つデータベースに複数のエントリを持っています。たとえば、J。DoeとJohn Doeがいる場合や、電子メールアドレスが付随するJohn Doeと電子メールアドレスが付随しないJohn Doeがある場合があります。 私はさまざまなクラスタリングアルゴリズムを調べてきましたが、次のようなルールに基づいてエントリを集約するということは、私がやっていることに適していないようです。 名前の1つがすべて大文字で書かれているかどうかに基づいて、姓名を推測します メールアドレスが一致する場合は「J. Doe」と「J. Doe」を集計する 「J.」で始まる姓と名「Doe」が他にない場合は、「J。Doe」を「John Doe」に集約します。 データセットが小さい場合、これはいくつかの単純なルールだけで比較的簡単なタスクになりますが、エントリの数が多いと、集約タスクが非常に遅くなり、ロジックがかなり複雑になります。私の現在の解決策(データベース内の全文検索機能を使用して類似のエントリを検索し、それらの結果に基づいてハッシュを追加し、次にハッシュとあいまいさの種類の組み合わせに基づいて集計する)は機能しますが、実行しようとするたびにそれを更新するだけで、誰かがすでに解決したような問題だと叫ぶだけです。しかし、私は解決策を見つけることができませんでした。 このようなルールに基づいて、私がやりたいことを行うアルゴリズムはありますか?または役立つかもしれない特定のパッケージまたはソフトウェア?それとも私はこの問題に完全に間違っているのですか? ありがとう! (ただし、IDを誤って集計する方法はさまざまにあることを承知している(たとえば、J。DoeはJohn DoeまたはJames Doeを意味する可能性がある)ので、物事を集計しようとすることに対する警告は必要ありません。)


2
Qラーニングが分岐するのはなぜですか?
私のQラーニングアルゴリズムの状態値は無限に発散し続けます。つまり、私の重みも発散しています。値のマッピングにはニューラルネットワークを使用しています。 私はもう試した: 「報酬+割引*アクションの最大値」のクリッピング(最大/最小は50 / -50に設定) 低い学習率の設定(0.00001と私は、重みを更新するために従来のバックプロパゲーションを使用しています) 報酬の価値を下げる 探査率を上げる 入力を1〜100に正規化します(以前は0〜1でした) 割引率を変更する ニューラルネットワークのレイヤーを減らす(検証のためだけ) Qラーニングは非線形入力で発散することが知られていると聞きましたが、重みの発散を止めようと試みることができる他に何かありますか? 2017年8月14日の更新#1: リクエストがあったため、現在行っていることについて具体的な詳細を追加することにしました。 私は現在、エージェントにシューティングゲームのトップダウンビューで戦う方法を学ばせようとしています。対戦相手は確率的に動くシンプルなボットです。 各キャラクターには、各ターンで選択できる9つのアクションがあります。 上に移動 下に移動 左に移動 右に動く 弾丸を上向きに発射する 弾丸を撃ち落とす 左に弾丸を撃ちます 右に弾丸を撃ちます 何もしない 報酬は次のとおりです。 エージェントがボットを弾丸で打った場合、+ 100(さまざまな値を試してみました) ボットが発射した弾丸にエージェントが当たった場合、-50(ここでも、さまざまな値を試しました) 弾丸を発射できないときにエージェントが弾丸を発射しようとした場合(例:エージェントが弾丸を発射した直後など)-25(必須ではありませんが、エージェントをより効率的にしたいと思いました) ボットがアリーナから出ようとした場合は-20(あまり必要ではありませんが、エージェントをより効率的にしたいと思いました) ニューラルネットワークの入力は次のとおりです。 0から100に正規化されたX軸上のエージェントとボット間の距離 0から100に正規化されたY軸上のエージェントとボット間の距離 エージェントのxとyの位置 ボットのxとyの位置 ボットの弾丸の位置。ボットが弾丸を発射しなかった場合、パラメーターはボットのx位置とy位置に設定されます。 私も入力をいじっています。エージェントの位置(距離ではなく実際の位置)のx値やボットの弾丸の位置などの新しい機能を追加してみました。それらのどれもうまくいきませんでした。 これがコードです: from pygame import * from pygame.locals import * import sys from …

2
評価ではなく購入履歴に基づく推奨システム
保険業界向けに最適化されたレコメンダーシステムのオプションを検討しています。 i)製品保有 ii)ユーザーの特性(セグメント、年齢、裕福さなど)。 強調したい a)利用可能な製品評価がないため、協調フィルタリングはオプションではありません b)推奨製品は、すでに購入された製品と類似している必要はありません。したがって、アイテム間の推奨はおそらく関連性がありません。 自動車保険に加入している人は、自宅や旅行などではなく、別のモーター製品を購入する可能性が低いため、保険では、すでに購入したものと同様の製品を推奨することはめったにありません。 そのため、購入履歴や人口統計に基づいて、ユーザー間の類似性に関する推奨事項を作成します 理想的には、それをRで、できればPythonで実装できるようにしたいと考えています。ヘルプと提案をありがとう!

2
Coursera ML-最適化アルゴリズムの選択は、マルチクラスロジスティック回帰の精度に影響しますか?
最近、Pythonを使用したCourseraでのAndrew Ngの機械学習の演習3を完了しました。 演習のパート1.4から1.4.1を最初に完了すると、トレーニング済みモデルが予想される94.9%に一致する精度を持っていることを確認するのが困難になりました。デバッグして、コストと勾配関数にバグがないこと、および予測子コードが正しく機能していることを確認した後でも、精度は90.3%しかありませんでした。で共役勾配(CG)アルゴリズムを使用していましたscipy.optimize.minimize。 好奇心から、別のアルゴリズムを試すことにし、ブロイデン-フレッチャー-ゴールドファーブ-シャノン(BFGS)を使用しました。驚いたことに、精度は大幅に96.5%に向上し、予想を上回りました。これら2つの異なる結果のCGとBFGSの比較は、ノートブックのヘッダー「最適化アルゴリズムの違いによる精度の違い」の下で確認できます。 最適化アルゴリズムの選択が異なるため、この精度の違いの理由はありますか?はいの場合、誰かが理由を説明できますか? また、これを引き起こしている関数にバグがないことを確認するためだけにコードをレビューしていただければ幸いです。 ありがとうございました。 編集:ここで、読者にJupyterノートブックへのリンクを紹介するのではなく、このページで行うコメントのリクエストに、質問に含まれるコードを追加しました。 モデルのコスト関数: def sigmoid(z): return 1 / (1 + np.exp(-z)) def compute_cost_regularized(theta, X, y, lda): reg =lda/(2*len(y)) * np.sum(theta[1:]**2) return 1/len(y) * np.sum(-y @ np.log(sigmoid(X@theta)) - (1-y) @ np.log(1-sigmoid(X@theta))) + reg def compute_gradient_regularized(theta, X, y, lda): gradient = np.zeros(len(theta)) XT = X.T beta …

1
メールスレッドから個別のメールを抽出する
ほとんどのオープンソースデータセットは適切にフォーマットされています。つまり、各電子メールメッセージは、エンロンの電子メールデータセットのようによく分離されています。しかし、現実の世界では、上位の電子メールメッセージを一連の電子メールから分離することは非常に困難です。 たとえば、次のメッセージについて考えてみます。 Hi, Can you offer me a better discount. Thanks, Mr.X Customer Relations. ---- On Wed, 10 May 2017 04:05:16 -0700 someone@somewhere.com wrote ------ Hello Mr.X, Does the below work out. Do let us know your thoughts. Thanks, Mr.Y Sales Manager. メールを分割したいのは、感情分析を行いたいからです。メールの分割に失敗すると、結果は正しくありません。 私は周りを検索し、この非常に包括的な研究論文を見つけました。メールガンtalonと呼ばれるメールガンによる実装も見つかりました。しかし、残念ながら、特定の種類のパターンではうまく機能しません。 たとえば、メールスレッドの2番目のメッセージが次のように中断した場合 ---------- Forwarded message ---------- 上記の代わりに …

2
分散PCAの仕組みを理解する
ビッグデータ分析プロジェクトの一環として、 クラウドコンピューティングシステムを使用して、一部のデータに対してPCAを実行する必要があります。 私の場合、私は仕事、特にSparkにAmazon EMRを使用しています。 「How to-Perform-PCA-in-Spark」の質問はさておき、クラウドベースのアーキテクチャでPCを計算する場合、舞台裏で物事がどのように機能するかを理解したいと思います。 たとえば、データのPCを決定する手段の1つは、特徴の共分散行列を計算することです。 たとえば、HDFSベースのアーキテクチャを使用している場合、元のデータは複数のノードに分散されており、各ノードがXレコードを受信して​​いると思います。 次に、各ノードに部分的なデータしかない場合、共分散行列はどのように計算されますか? これは単なる例です。私は、このすべての舞台裏のブードゥー教を説明する紙やドキュメントを探していますが、自分のニーズ(おそらく、Googleのスキルが低い)に対して十分なものを見つけることができませんでした。 だから私は基本的に私の質問を要約することができます\は以下でなければなりません: 1.クラウドアーキテクチャ上の分散型PCAの仕組み できれば、いくつかの学術論文またはその他の種類の説明も含みます。 2. D-PCAのSpark実装 Sparkはそれをどのように行うのですか?彼らはそれをより効率的にするために彼らのアーキテクチャに「ひねり」を持っていますか、またはRDDオブジェクトの使用はどのように効率の改善に貢献していますか?等 それに関するオンラインレッスンのプレゼンテーションも素晴らしいでしょう。 いくつかの読書資料を提供できる人には、事前に感謝します。

1
Kerasの埋め込みレイヤーを適切に使用するには?
seq2seqの目的でKerasの埋め込み層の適切な使用法を少し混乱しています(KerasでTensorFlow se2seq機械翻訳チュートリアルを再構築したいと思います)。私の質問は次のとおりです。 埋め込みレイヤーが文の単語値を固定次元長表現に変換することを理解しています。しかし、埋め込みレイヤーの2つの異なる使用法を観察します。1つは(Keras ブログのこのチュートリアルのように)、weightsパラメーターを介して外部の事前トレーニング済みのword2vecベクトルを利用します。 from keras.layers import Embedding embedding_layer = Embedding(len(word_index) + 1, EMBEDDING_DIM, weights=[embedding_matrix], input_length=MAX_SEQUENCE_LENGTH, trainable=False)` 他のケースでは、そのような外部出力はありませんが、ユーザーは、埋め込みベクトルに進んで表現ベクトルを決定します。望ましい結果に関するこれらのアプローチの実際の違いは何ですか?たぶん内部のみのソリューションは意味論的表現ではありませんか?行がすでに固定長である外部マトリックスに埋め込み層を適用するポイントは何ですか? さらに、trainable埋め込みレイヤーのパラメーターの目的/効果は何ですか?これをTrueに設定すると、Embeddingレイヤーがインポートされたword2vecの重みを実際のトレーニング例を考慮に入れるように微調整できると思いますか? さらに、「メタ文字」を適切にエンコードするように埋め込みレイヤーに指示するにはどうすればよいですか?mask_zeroパラメータをTrueに設定すると、パディングゼロを組み込むことができますが、UNK(不明)、EOS(文の終わり)はどうなりますか?(ちなみに、文ベースの入力で文の終わりに明示的に署名するポイントが何であるか理解できません...) そして最後に、トレーニングセットで表されていない単語の翻訳をモデルがどのように予測できるでしょうか。語彙で「最も近い」ものと近似しようとしていますか?

1
音素認識のためのCNN
私は現在、このドキュメントを研究しています。CNNは、ログメルフィルターバンクの視覚的表現を使用した音素認識、および制限された重み共有スキームに適用されます。 ログメルフィルターバンクの視覚化は、データを表現および正規化する方法です。彼らは私が使用してそれをプロットすることであろうと出てくる可能性が最も近いRGBの色とスペクトログラムとして可視化することをお勧めmatplotlibsカラーマップをcm.jet。それらは(紙であるため)、各フレームを[静的デルタdelta_delta]フィルターバンクエネルギーでスタックする必要があることも示唆しています。これは次のようになります。 15フレームセットの画像パッチで構成される[静的デルタdelta_detlta]入力形状は、(40,45,3)になります。 制限された重みの共有は、重みの共有を特定のフィルターバンク領域に制限することで構成されます。これは、音声が異なる周波数領域で異なって解釈されるため、通常の畳み込みが適用されるため、完全な重みの共有は機能しません。 制限された重み共有の実装は、各畳み込み層に関連付けられた重み行列の重みを制御することで構成されます。したがって、完全な入力に畳み込みを適用します。複数を使用すると、たたみ込み層から抽出された特徴マップの局所性が破壊されるため、紙はたった1つのたたみ込み層のみを適用します。それらが通常のMFCC係数ではなくフィルターバンクエネルギーを使用する理由は、DCTがフィルターバンクエネルギーの局所性を破壊するためです。 畳み込み層に関連付けられた重み行列を制御する代わりに、複数の入力を使用してCNNを実装することを選択します。したがって、各入力は(小さなフィルターバンク範囲、total_frames_with_deltas、3)で構成されます。したがって、たとえば、用紙サイズは8のフィルターサイズが適切であると述べたため、フィルターバンクの範囲を8に決定しました。したがって、各小さな画像パッチのサイズは(8、45、3)です。小さな画像パッチのそれぞれは、ストライドが1のスライディングウィンドウで抽出されます。そのため、各入力間に多くのオーバーラップがあり、各入力には独自の畳み込み層があります。 (input_3、input_3、input3、input_1、input_2、input_3 ...である必要があります) この方法を使用すると、複数の畳み込み層を使用できるようになります。これは、局所性が問題にならないためです。フィルターバンク領域内に適用されるため、これは私の理論です。 紙はそれを明示的に述べていませんが、彼らが複数のフレームで音素認識を行う理由は、いくつかの左コンテキストと右コンテキストがあるため、中央のフレームのみが予測/トレーニングされているためです。したがって、私の場合、最初の7フレームは左のコンテキストウィンドウに設定されています。中央のフレームはトレーニングされており、最後の7フレームは右のコンテキストウィンドウに設定されています。したがって、複数のフレームが与えられた場合、1つの音素だけが中央であると認識されます。 私のニューラルネットワークは現在、次のようになっています。 def model3(): #stride = 1 #dim = 40 #window_height = 8 #splits = ((40-8)+1)/1 = 33 next(test_generator()) next(train_generator(batch_size)) kernel_number = 200#int(math.ceil(splits)) list_of_input = [Input(shape = (window_height,total_frames_with_deltas,3)) for i in range(splits)] list_of_conv_output = [] list_of_conv_output_2 = [] list_of_conv_output_3 = [] …


2
非負のスパース時系列データの予測
時間の経過に伴う顧客への製品の販売を表す時系列データセット(毎日の頻度)があります。売上は次のように表されます。 [ 0 、0 、0 、0 、24 、0 、0 、0 、0 、0 、0 、0 、4 、0 、0 、0 、0 、17 、0 、0 、0 、0 、9 、0 、。。。][0、0、0、0、24、0、0、0、0、0、0、0、4、0、0、0、0、17、0、0、0、0、9、0、。。。][0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 17, 0, 0, 0, 0, 9, 0, …

1
なぜk分割交差検証(CV)がオーバーフィットするのですか?または、なぜCVとテストセットの間で不一致が発生するのですか?
最近、プロジェクトに取り組んでいて、相互検証エラー率が非常に低いのに、テストセットのエラー率が非常に高いことがわかりました。これは、私のモデルが過剰適合していることを示している可能性があります。テストセットがオーバーフィットしているのに、クロス検証がオーバーフィットしないのはなぜですか? より具体的には、100個の変数(n >> p)を持つ約200万の観測値があります。データセットをランダムに80/20トレインとテストに分割しました。次に、トレーニングセットで5分割交差検証を使用してモデル(XGboostなど)を近似し、推定エラー率はかなり低くなっています。次に、同じパラメーター設定を使用し、トレーニングセット全体を使用してモデルに適合させました。驚いたことに、テストセットを使用してモデルのパフォーマンスを評価したところ、エラーレートはCVエラーレートよりも大幅に高くなっています。どうして? 編集: (エラー率について) エラー率は、実際に多項loglossです。1.320044(+/- 0.002126)のCVエラー率と1.437881のテストエラー率を達成しました。これら2つの数字を見つめると、彼らは近くに見えるかもしれませんが、実際にはそうではありません。これを正当化する方法はわかりませんが、このプロジェクトのパフォーマンスのスケール(1.55から1.30まで)では、それらが異なると確信しています。 5分割交差検証の方法は次のようなものです。 列車セットを5セットに分割します。 4セットのモデルを繰り返し適合させ、残りのセットでパフォーマンスをテストします。 5つの反復すべてのパフォーマンスを平均化します。 つまり、私のパラメーター設定でモデルがオーバーフィットする場合は、この相互検証手順で確認する必要があります。しかし、テストセットを使用するまでは表示されません。地球上のどのような状況下でこれが起こる可能性がありますか? ありがとう! 追加: CVエラーレートがテストセットエラーレートと異なる理由は、 あなたが持っているデータがあなたが予測しようとしているデータを代表していないなら、クロス検証は外部データに対してうまく機能しません! - ここに しかし、ランダムに8/2で200万サンプルのデータセットを分割しました。トレインセットとテストセットの変数の分布は同じであるはずです。 (私も同じ質問をここに投稿してください。) 編集: (データ漏洩について) クロスバリデーションされた@darXiderから1つの興味深い賞をいただきました。彼は言う、 場合によっては、機能エンジニアリングの際に、トレーニングセットとテストセットの間のデータリークを回避するように注意する必要があります。たとえば、元の手つかずのデータでPCAを実行し、PC1とPC2を「新しい」機能として使用し、データセットをトレーニングとテストに分割すると、トレーニングセットからテストセットに情報がリークします。それはあなたのスコアを押し上げます。機能エンジニアリングの後で、CVスコアとテストスコアが一致しなくなったとのことですが、これは、トレーニングセットとテストセットの間で何らかの情報漏えいを示唆する可能性があります。 正確には「データ漏えい」とは何なのか、なぜ分割前の機能エンジニアリングがまだ「データ漏えい」を引き起こす可能性があるのでしょうか?

1
テンソル形式で「自然に」逆伝播方程式を導出する
画像は、フィードフォワードネットワークのどこかにある典型的なレイヤーを示しています。 a(k)iai(k)a_i^{(k)} のアクティベーション値です ithithi^{th} ニューロン kトンの時間kthk^{th} 層。 W(k )私はjWij(k)W_{ij}^{(k)} 接続している重量は 私トンの時間私thi^{th} ニューロン kトンの時間kthk^{th} レイヤーを jトンの時間jthj^{th} ニューロン (k + 1)トンの時間(k+1)th(k+1)^{th} 層。 z(k+ 1 )jzj(k+1)z_j^{(k+1)} は、 jトンの時間jthj^{th} ニューロン (k + 1)トンの時間(k+1)th(k+1)^{th}層。ロジスティック関数で使用される場合、これは「ロジット」と呼ばれることがあります。 フィードフォワードの方程式は次のとおりです。 z(k + 1 )j=Σ私W(k )私はja(k )私zj(k+1)=Σ私W私j(k)a私(k)z_j^{(k+1)} = \sum_i W_{ij}^{(k)}a_i^{(k)} a(k + 1 )j= f(z(k + 1 )j)aj(k+1)=f(zj(k+1))a_j^{(k+1)} = f(z_j^{(k+1)}) 簡単にするために、バイアスは1のダミーアクティベーションとして含まれ、暗黙的に反復で使用されます。 …

1
ディープニューラルネットでの次のカリキュラム学習の実装には何が欠けていますか?
まず、分類タスクがあります。 したがって、分類には典型的なソフトマックスクロスエントロピーを使用します。 カリキュラム学習の現在の実装は次のとおりです。 まず、ニューラルネットの最適なバージョンをトレーニングします 最後のエポックで、すべてのインスタンスのすべてのクロスエントロピーを取得します。そのため、小さいクロスエントロピーはより適切に分類され、大きいものはそれほど適切ではありません。 次に、クロスエントロピーに基づいてインスタンスを並べ替えます。 次に、カリキュラム学習理論が示唆するように、インスタンスのトレーニングをより簡単なものから難しいものへと始めます すでにさまざまなステップと繰り返しを試していることに注意してください。したがって、1つの例では、最初の200バッチを取得し、次のバッチに進む前に2回トレーニングし、エポックが完了するまで続けました。 別の例では、最初の10バッチを取得し、それらを1回だけトレーニングしてから、次の10と次の10を、エポックの終わりまで続けます。 これまでのすべての実験は、ニューラルネットワークは最初は比較的問題のない精度であると結論しており、より困難なインスタンスが発生すると、これは悪化します。最終的な精度は予想よりもはるかに悪く、最大の精度はまだかなり悪いです。 このカリキュラムの学習が機能しないのはなぜですか?不足しているものはありますか?


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.