KTVの歌勧告-PCAの次元削減+ロジスティック回帰 - ジェンダー予測とオーバーフィッティングプロセス

ロジスティック回帰の前の使用は、それは訓練の速度に影響を与えますが比較的疎な行列に、ユーザーの性別を予測します。だから、これが唯一のPCAとSVDを検討し、次元削減、次元削減プログラムが多くあります検討してください。

PCAとSVD原則

利害関係者は、自分で見に行くことができますhttps://www.sangyulpt.com / @ jonathan_hui /機械学習-特異値分解-SVD-主成分分析-PCA-1d45e885e491

I簡潔に:

  • PCAは、低次元の座標系に高次元のデータをマッピングするので、まばらなデータにしてみてください
  • SVDは、PCAの非正方行列であります
  • SVDとPCAの実際の使用には大きな違いではありません
  • 機能は、データレコードの数よりも大きい場合、良好な結果を持つことができない場合は、特定の原因に行くことができます。

コード

データ収集と処理

次のようにここでは、何度も前に書かれた記事が元の形状データをスキップ:1900 2000 *

PCAおよびマトリックス変換

寸法の表示に最適な番号

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA pca = PCA().fit(song_hot_matrix) plt.plot(np.cumsum(pca.explained_www.yixingylzc.cn variance_ratio_)) plt.xlabel('number of components') plt.ylabel('cumulative explained variance'); 

図から分かるように、90以上の解釈を達成するために1500程度の寸法を有し、

説明行列は、99%を保持しています

pca = PCA(n_components=0.99, whiten=www.lecaixuanzc.cn True)
song_hot_matrix_pca = pca.fit_transform(song_hot_matrix)

圧縮機能を取得した後、次のとおりです。* 1565 2000はあまり圧縮ではありません

モデルのトレーニング

import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"   # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] www.tianjiptzc.cn= "" import numpy as np from keras.models import Sequential from keras.layers import Dense, Activation, Embedding,Flatten,Dropout import matplotlib.pyplot as plt from keras.utils import np_utils from sklearn import datasets from sklearn.model_selection import train_test_split n_class=user_decades_encoder.get_class_count(www.shentuylgw.cn) song_count=song_label_encoder.get_class_count(shentuylzc.cn ) print(n_class) print(song_count) train_X,test_X, train_y, test_y = train_test_split(song_hot_matrix_pca, decades_hot_matrix, test_size = 0.2, random_state = 0) train_count = np.shape(train_X)[0] # 构建神经网络模型 model = Sequential(www.shicaiyulezc.cn) model.add(Dense(input_dim=song_hot_matrix_pca.shape[1], units=n_class)) model.add(Activation('softmax')www.lecaixuangj.cn) # 选定loss函数和优化器 model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) # 训练过程 print('Training -----------') for step in range(train_count): scores = model.train_on_batch(train_X, train_y) if step % 50 == 0: print("训练样本 %d 个, 损失: %f, 准确率: %f" % (step, scores[0], scores[1]*100)) print('finish!') 

トレーニングの結果:

训练样本 4750 个, 损失: 0.371499, 准确率: 83.207470
训练样本 4800 个, 损失: 0.381518, 准确率: 82.193959 训练样本 4850 个, 损失: 0.364363, 准确率: 83.763909 训练样本 4900 个, 损失: 0.378466, 准确率: 82.551670 训练样本 4950 个, 损失: 0.391976, 准确率: 81.756759 训练样本 5000 个, 损失: 0.378810, 准确率: 83.505565 

テストセットの検証:

# 准确率评估
from sklearn.metrics import classification_report
scores = model.evaluate(test_X, test_y, verbose=0)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100)) Y_test = np.argmax(test_y, axis=1) y_pred = model.predict_classes(song_hot_matrix_pca.transform(test_X)) print(classification_report(Y_test, y_pred)) 

精度:50.20パーセント

明らかにそれが装着されています

治療フィッティング

本明細書で使用される、プラスドロップアウト、ランダムドロップ機能はフィッティング方法で処理されるように、コード:

# 构建神经网络模型
model = Sequential()
model.add(Dropout(0.5))
model.add(Dense(input_dim=song_hot_matrix_pca.shape[1], units=n_class)) model.add(Activation('softmax')) 

70%の正解率

よくやった

実際には、SVDとPCAアプローチは、ここにはデモ似ていません。私がテストした後、トレーニングスピードを加速するが、あまりにも多くの機能をドロップしますが、データを簡単にオーバーフィットにつながる可能性PCA、私のデータセットで、発見されました。ドロップアウト参加状況は、次元削減をコーディングからシェアの下で、フィッティングすることによって改善することができます。

おすすめ

転載: www.cnblogs.com/laobeipai/p/12436445.html