ロジスティック回帰の前の使用は、それは訓練の速度に影響を与えますが比較的疎な行列に、ユーザーの性別を予測します。だから、これが唯一の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、私のデータセットで、発見されました。ドロップアウト参加状況は、次元削減をコーディングからシェアの下で、フィッティングすることによって改善することができます。