sharpcx

## PCA和SVD原理

• PCA是将高维数据映射到低维坐标系中，让数据尽量稀疏
• SVD就是非方阵的PCA
• 实际使用中SVD和PCA并无太大区别
• 如果特征大于数据记录数，并不能有好的效果，具体原因自己可以去看。

## 代码

### 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_variance_ratio_))
plt.xlabel('number of components')
plt.ylabel('cumulative explained variance');
``````

#### 保留99%矩阵解释性

``````pca = PCA(n_components=0.99, whiten=True)
song_hot_matrix_pca = pca.fit_transform(song_hot_matrix)
``````

### 模型训练

``````import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"   # see issue #152
os.environ["CUDA_VISIBLE_DEVICES"] = ""

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

song_count=song_label_encoder.get_class_count()
print(n_class)
print(song_count)

train_X,test_X, train_y, test_y = train_test_split(song_hot_matrix_pca,
test_size = 0.2,
random_state = 0)
train_count = np.shape(train_X)[0]
# 构建神经网络模型
model = Sequential()

# 选定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

``````

``````# 准确率评估
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))
``````

accuracy: 50.20%

### 处理过拟合-增加Dropout

``````# 构建神经网络模型
model = Sequential()
``````

accuracy：70%

### 处理过拟合-L1L2正则

``````# 构建神经网络模型
model = Sequential()
``````

accuracy：62%

### 评论(4)

(1)涉及到的算法 1.监督学习：线性回归，逻辑回归，神经网络，SVM。 线性回归（下面第三行x0(i)其实是1，可以去掉） 逻辑回归 神经网络（写出前向传播即可，反向框架会自动计算） SVM 2.非监...

ysyouaremyall
2018/07/07
0
0

14.1动机一：数据压缩 将特征进行降维，如将相关的二维降到一维： 三维变二维： 以此类推把1000维数据降成100维数据。 14.2动机二：数据可视化 如50个维度的数据是无法进行可视化的，使用降维...

youaremyall
2018/07/04
0
0

2019/05/01
0
0
Netty【6】要么不开始，要么一辈子

2019/07/23
85
0

2018/07/12
0
0

SSM框架整合

mybatis逆向工程 mybatis-generator生成pojo、mapper接口及映射文件 mapper放到e3-manager-dao层中 导入sql到数据库中； 导入逆向工程工具，配置xml文件 运行main方法 重复运行main不会覆盖！...

33分钟前
25
0
OSChina 周日乱弹 —— 和网友的第一次开房经历

Osc乱弹歌单（2020）请戳（这里） 【今日歌曲】 @薛定谔的兄弟 ：分享洛神有语创建的歌单「我喜欢的音乐」: 《Ljósið》- Ólafur Arnalds 手机党少年们想听歌，请使劲儿戳（这里） @xiaos...

50分钟前
23
0

11
0
JVM调优实战分析

IT-Mamba

29
0