音乐分类

代码:

 1 import numpy as np
 2 from scipy import fft
 3 from scipy.io import wavfile
 4 from sklearn.linear_model import LogisticRegression
 5 import random
 6 """
 7     使用logistic regression处理音乐数据,音乐数据训练样本的获得是使用快速傅里叶变换:
 8     1.吧训练集扩大到每类100首歌二部之前的10首歌
 9     2.同时使用logistic回归和KNN作为分类器
10     3.引入一些评价标准来比较logictic和KNN在测试集上的表现
11 """
12 """
13 n = 40
14 # hstack数据拼接
15 # 在模拟X的时候使用了两个正态分布,分别制定各自的均值,方差,生成40个点
16 X = np.hstack((norm.rvs(loc=2, size=n, scale=2), norm.rvs(loc=8, size=n, scale=3)))
17 # zeros使得数据点生成40个0,ones使得数据点生成40个1
18 y = np.hstack((np.zeros(n), np.ones(n)))
19 
20 """
21 general_list = ["classical", "jazz", "country", "pop", "rock", "metal"]
22 """
23 # 处理原始数据,转化为特征文件
24 def create_fft(g, n):
25     read = "d:/xxx/"+g+"/conberted/"+g+"."+str(n).zfill(5)+".au.wav"
26     sample_rate, x = wavfile.read(read)
27     fft_features = abs(fft(x)[:1000])
28     sad = "d:/trainset/"+g+"."+str(n).zfill(5)+".fft"
29     np.save(sad, fft_features)
30 
31 
32 for g in gener_list:
33     for n in range(100):
34         create_fft(g, n)
35 """
36 # 加载训练集数据,分割训练集和测试集,进行分类器的训练
37 # 构造训练集
38 x = []
39 y = []
40 for g in general_list:
41     for n in range(100):
42         read = "D:/AnalyseData学习资源库/人工智能开发【中】/05_分类器项目案例和神经网络算法【尚学堂·百战程序员】/资料/trainset/"+g+"."+str(n).zfill(5)+".fft"+".npy"
43         fft_features = np.load(read)
44         x.append(fft_features)
45         y.append(general_list.index(g))
46 
47 x = np.array(x)
48 y = np.array(y)
49 
50 # 拆分数据为训练集和测试集
51 randomIndex = random.sample(range(len(y)), int(len(y)*8/10))
52 trainX = []
53 trainY = []
54 testX = []
55 testY = []
56 
57 for i in range(len(y)):
58     if i in randomIndex:
59         trainX.append(x[i])
60         trainY.append(y[i])
61     else:
62         testX.append(x[i])
63         testY.append(y[i])
64 
65 # 使用sklearn来构建和训练两种分类器
66 
67 # logistic classifier
68 model = LogisticRegression()
69 # train
70 model.fit(trainX, trainY)
71 # test
72 predict = model.predict(testX)
73 print(testY)
74 print("--------------------------------------------------")
75 print(predict)
76 # error
77 import math
78 error = 0.0
79 for i in range(len(testY)):
80     if testY[i] != predict[i]:
81         error = error + 1
82 print(error/len(testY))
83 
84 print("starting read wavfile...")
85 sample_rate, test = wavfile.read("D:/AnalyseData学习资源库/人工智能开发【中】/05_分类器项目案例和神经网络算法【尚学堂·百战程序员】/资料/trainset/sample/heibao-wudizirong-remix.wav")
86 testdata_fft_features = abs(fft(test))[:1000]
87 type_index = model.predict([testdata_fft_features])[0]
88 
89 print("预测音乐分类为:"+general_list[type_index])

结果:

 

转载于:https://www.cnblogs.com/yszd/p/9513833.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Problem C: 类的初体验(III)

Description 定义一个类Data,只有一个double类型的属性和如下4个方法: 1. 缺省构造函数,将属性初始化为0,并输出“Initialize a data 0”。 2. 带参构造函数,将属性初始化为指定参数,并输出“Initialize…

Nginx- 实现跨域访问

一、什么是跨域 跨域:由于浏览器的同源策略,即属于不同域的页面之间不能相互访问各自的页面内容。详细见下表: 注:同源策略,单说来就是同协议,同域名,同端口 URL说明是否允许通信http://www.a…

不管对不对,先把闹钟关了再说

小榆提前关闭早上闹钟,几乎工作日的早晨都是被这魔怔的铃声给拉扯醒,无论有多么不愿还是痛苦,可对这闹钟也无可奈何,就算一时果断掐掉接下来是另一回麻烦事。最后一天,已经顾不得多少,没什么令人惧怕的人或…

pycharm(windows)安装及其设置中文菜单

pycharm(windows)安装及其设置中文菜单 1.下载 在官网(http://www.jetbrains.com/pycharm/download/#sectionwindows)进行下载 或者到百度云进行下载 专业版:链接:http://pan.baidu.com/s/1bSSRds 密码&…

Tomcat定义虚拟主机案例

Tomcat定义虚拟主机案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 一.准备环境 1>.创建web程序的根目录 [rootyinzhengjie ~]# mkdir -pv /home/yinzhengjie/data/www/webapps/ROOT mkdir: created direc…

node服务成长之路

我们的系统也从第一代平台开始到现在第四代平台更换中,对这四代平台做一个简单的介绍: 第一代平台,主要是集中式,以快速上线为目的;第二代平台主要是分布式改造,缓解各服务压力;第三代平台主要做…

将域名绑定到ip上,并实现访问不同二级子域名对应不同目录

一、将域名绑定到ip上1、环境介绍:阿里云服务器ESC(美国硅谷) 2、购买域名 3、备案 注:由于我买的是美国地区服务器,所以不用备案,如果买的国内服务器,这里需要添加一个备案操作。 4、域名实名认…

ABP vNext微服务架构详细教程(补充篇)——单层模板(中)

框架搭建2聚合服务这里我们将聚合服务命名为Domain.Core和基础服务层一致,我们先通过命令创建单层模板项目Domain.Core,这里我们删除wwwroot、Data、Entities、Localization、ObjectMapping文件夹及其所有子文件,并删除package.json文件和Ser…

谈一谈synchronized关键词

1.使用 java中的每一个对象都可以作为synchronized的锁进行代码同步,常见的形式 同步代码块锁是synchronized括号内的对象普通成员方法上,锁是当前的对象,synchronized(this)静态方法上,锁是当前类的Class对象2. 原理 synchronize…

系统学习redis之二——redis集群搭建

redis单点部署: 安装命令: # cd /usr/local/ # wget http://download.redis.io/releases/redis-4.0.1.tar.gz #下载安装包 # yum -y install gcc psmisc #安装依赖包 # tar xf redis-4.0.1.tar.gz # cd /usr/lo…

业务技术协同线上化的研发管理实战

摘要:2017年1月13日举办的【云栖计算之旅】线下沙龙第4期研发管理专场,阿里巴巴B2B事业群产品专家代平为大家带来了题为业务技术协同线上化的研发管理实战的演讲。本文主要从管理产品研发的理念开始谈起,着重说明了云效指挥部的六大步骤&…

Linux中写脚本,同时去开启我们自己设定的多个服务(含定时脚本实现)

场景介绍: 在Linux中,我们通常开启服务需要使用systemctl start 服务名 命令,这样,如果开启一个服务还好,但是如果同时开启多个服务,难免会感到麻烦,这时,我们可以自定义一个脚本&a…

Android之利用EventBus进行数据传递

在项目中,不可避免的要在两个页面之间进行数据的传递,就算不传递,也需要进行刷新之类的,我们根据Google提供的库类方法,也是可以做的,主要有广播broadcastreceiver,startactivity方法或者是appl…

负载均衡环境搭建实战之nginx和tomcat

Linux基本环境负载均衡的环境需要在linux下搭建完成,所以有一个基础的linux系统是必须的,这里建议大家按照http://edu.51cto.com/course/10209.html中的基础linux环境来安装,这样能少走弯路。JDK安装1、 下载对应版本的Java1.7,a)…

Java java.lang.SecurityException: Prohibited package name

java.lang.SecurityException: Prohibited package name 提示java错误: Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.xxx 问题所在:package java.xx; 定义包时不能以java.的形式定义转载于:https…

桌面应用如何判断win11操作系统

背景Windows 11 操作系统已经正式发布快有一年了,在 .Net 开发中,我们获取操作系统版本,经常使用 Environment.OSVersion.Version.Major 和 Minor(6.1 Windows 7, 10.0 Windows 10),但是当 Win11 出现以后…

Nginx 网站定义自己的错误页面

场景: 为了给用户较好的交互和感官,我们通常需要对错误页面进行友好提示。 环境介绍: LNMP(linux(centos7.4)Nginx Mysql5.6 php7.0)实现: 这里,我直接对nginx的子配置文…

Python中的变量

1、声明变量: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 namewupeiqi 上述代码声明了一个变量,变量名为:name,变量name的值为“wupeiqi” 变量的作用: 为了方便操作,需要把这些数据分别用一个简…

车辆调度

为什么80%的码农都做不了架构师?>>> 车辆调度系统 大体上分为4个部分吧 1.调度车辆:你调度的时候需要的车辆,方便给你运输啥的 2.调度任务:你为啥会调度车辆,肯定要有一个任务 3.客户:那这个…

threeJS 实用

texture可以是图片和canvas,并且最终是作为material的map属性来渲染。texture的构造函数中有一个参数image(图片,canvas),使用图片的时候需要使用imageLoader加载到图片产生一个image对象,然后设置成为text…