KTV歌曲推荐-PCA降维+逻辑回归-性别预测及过拟合处理

上一篇使用逻辑回归预测了用户性别,由于矩阵比较稀疏所以会影响训练速度。所以考虑降维,降维方案有很多,本次只考虑PCA和SVD。

PCA和SVD原理

有兴趣的可以自己去研究一下 https://www.sangyulpt.com   /@jonathan_hui/machine-learning-singular-value-decomposition-svd-principal-component-analysis-pca-1d45e885e491

我简述一下:

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

代码

数据获取和处理

以前文章写过很多次,这里略过 原数据shape为:2000*1900

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‘);

从图中可以看出大概1500维度已经可以达到90+解释性

保留99%矩阵解释性

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

得到压缩后特征为: 2000*1565 并没有压缩多少

模型训练

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))

accuracy: 50.20%

很明显已经过拟合

处理过拟合

这里使用加Dropout,随机丢弃特征的方式处理过拟合,代码:

# 构建神经网络模型
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%

well done

其实SVD的做法与PCA类似,这里不再演示。经过我测试发现,在我的数据集上,PCA虽然加快了训练速度,但是丢弃了太多特征,导致数据很容易过拟合。加入dropout可以改善过拟合的情况,下一篇会分享自编码降维。

原文地址:https://www.cnblogs.com/laobeipai/p/12436445.html

时间: 2024-10-08 15:42:52

KTV歌曲推荐-PCA降维+逻辑回归-性别预测及过拟合处理的相关文章

逻辑回归模型预测股票涨跌

http://www.cnblogs.com/lafengdatascientist/p/5567038.html 逻辑回归模型预测股票涨跌 逻辑回归是一个分类器,其基本思想可以概括为:对于一个二分类(0~1)问题,若P(Y=1/X)>0.5则归为1类,若P(Y=1/X)<0.5,则归为0类. 一.模型概述 1.Sigmoid函数 为了具象化前文的基本思想,这里介绍Sigmoid函数: 函数图像如下: 红色的线条,即x=0处将Sigmoid曲线分成了两部分:当 x < 0,y <

《BI那点儿事》Microsoft 逻辑回归算法——预测股票的涨跌

数据准备:一组股票历史成交数据(股票代码:601106 中国一重),起止日期:2011-01-04至今,其中变量有“开盘”.“最高”.“最低”.“收盘”.“总手”.“金额”.“涨跌”等 UPDATE FactStock SET [涨跌] = N'涨' WHERE [涨幅] > 0 UPDATE FactStock SET [涨跌] = N'跌' WHERE [涨幅] < 0 UPDATE FactStock SET [涨跌] = N'持平' WHERE [涨幅] = 0 SELECT [涨跌]

逻辑回归(logistic-regression)之梯度下降法详解

引言 逻辑回归常用于预测疾病发生的概率,例如因变量是是否恶性肿瘤,自变量是肿瘤的大小.位置.硬度.患者性别.年龄.职业等等(很多文章里举了这个例子,但现代医学发达,可以通过病理检查,即获取标本放到显微镜下观察是否恶变来判断):广告界中也常用于预测点击率或者转化率(cvr/ctr),例如因变量是是否点击,自变量是物料的长.宽.广告的位置.类型.用户的性别.爱好等等. 本章主要介绍逻辑回归算法推导.梯度下降法求最优值的推导及spark的源码实现. 常规方法 一般回归问题的步骤是: 1. 寻找预测函数

Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression &amp; Regularization

原文地址:http://blog.csdn.net/abcjennifer/article/details/7716281 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Octave Tutorial.Logistic Regression.Regularization.神经网络.机器学习系统设计.SVM(Support Vector Machines 支持向量机).聚类.降维.异常检测.大规模机器学习等章节.所有内容均来自Standford公开课machin

逻辑回归原理小结

逻辑回归是一个分类算法,它可以处理二元分类以及多元分类.虽然它名字里面有"回归"两个字,却不是一个回归算法.那为什么有"回归"这个误导性的词呢?个人认为,虽然逻辑回归是分类模型,但是它的原理里面却残留着回归模型的影子,本文对逻辑回归原理做一个总结. 1. 从线性回归到逻辑回归 我们知道,线性回归的模型是求出输出特征向量Y和输入样本矩阵X之间的线性关系系数\(\theta\),满足\(\mathbf{Y = X\theta}\).此时我们的Y是连续的,所以是回归模型.

【机器学习】Octave 实现逻辑回归 Logistic Regression

34.62365962451697,78.0246928153624,0 30.28671076822607,43.89499752400101,0 35.84740876993872,72.90219802708364,0 60.18259938620976,86.30855209546826,1 79.0327360507101,75.3443764369103,1 45.08327747668339,56.3163717815305,0 61.10666453684766,96.51142

LR(逻辑回归)

首先说一下线性回归模型:它试图学得一个通过属性的线性组合来进行预测的函数,即: h(x) = w0 + w1x1 + w2x2 + ... + wnxn 写成向量形式为:h(x) = wTx 逻辑回归是一种分类算法,本质上是线性回归,它通过引入对数几率函数将线性回归得到的连续值映射到0~1之间, 从而可以用在分类问题上 逻辑回归的预测函数为: 对于任意确定的x和w,有: 可以合并写成: 对P(y|x,w)取极大似然函数: 取对数似然函数: (即令每个样本属于其真实类别的概率总和越大越好) 上面的

R语言-逻辑回归建模

案例1:使用逻辑回归模型,预测客户的信用评级 数据集中采用defect为因变量,其余变量为自变量 1.加载包和数据集 library(pROC) library(DMwR)model.df <- read.csv('E:\\Udacity\\Data Analysis High\\R\\R_Study\\高级课程代码\\数据集\\第一天\\4信用评级\\customer defection data.csv',sep=',',header=T 2.查看数据集, dim(model.df) hea

sklearn逻辑回归实战

目录 题目要求 ex2data1.txt处理 方案一:无多项式特征 方案二:引入多项式特征 ex2data2.txt处理 两份数据 ex2data1.txt ex2data2.txt 题目要求 根据学生两门课的成绩和是否入学的数据,预测学生能否顺利入学:利用ex2data1.txt和ex2data2.txt中的数据,进行逻辑回归和预测. 数据放在最后边. ex2data1.txt处理 作散点图可知,决策大致符合线性关系,但还是有弯曲(非线性),用线性效果并不好,因此可用两种方案:方案一,无多项式