python音乐分类--knn
1 #利用knn算法分类音乐,将音乐进行情绪分类
2 #将音乐分为兴奋的(excited), 愤怒的(angry),悲伤的(sorrowful),轻松的(relaxed)
3
4 #可分离因素
5 # mfcc
6
7 import numpy as np
8 from matplotlib import pyplot as plt
9 from scipy import io as spio
10 from sklearn.decomposition import pca
11 from sklearn.preprocessing import StandardScaler
12 import librosa
13 import librosa.display
14 from mutagen.mp3 import MP3
15 import numpy as np
16 import os
17
18 def getFeature(path):
19 y, sr = librosa.load(path)
20
21 mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=40)
22 mfccNew = np.ravel(mfccs[:, :1000])
23 return mfccNew
24
25 def loadDataSet():
26 #歌曲的数量
27 dataSet = np.zeros((40, 40000))
28 labels = []
29
30 excited = r'./musicF/excited'
31 angry = r'./musicF/angry'
32 sorrowful = r'./musicF/sorrowful'
33 relaxed = r'./musicF/relaxed'
34
35 filenames = os.listdir(excited)
36 i = 0
37 for filename in filenames:
38 print(filename)
39 dataSet[i] = getFeature(excited + '/' + filename)
40 labels.append('excited')
41 i += 1
42
43 filenames = os.listdir(angry)
44 for filename in filenames:
45 print(filename)
46 dataSet[i] = getFeature(angry + '/' + filename)
47 labels.append('angry')
48 i += 1
49
50 filenames = os.listdir(sorrowful)
51 for filename in filenames:
52 print(filename)
53 dataSet[i] = getFeature(sorrowful + '/' + filename)
54 labels.append('sorrowful')
55 i += 1
56
57 filenames = os.listdir(relaxed)
58 for filename in filenames:
59 print(filename)
60 dataSet[i] = getFeature(relaxed + '/' + filename)
61 labels.append('relaxed')
62 i += 1
63
64
65 return dataSet, labels
66
67 #欧几里得距离计算相关度
68 def kNNClassify(features, dataSet, k, labels):
69 numSamples = dataSet.shape[0]
70 t = np.tile(features, (numSamples , 1))
71
72
73
74 diffVal = t - dataSet #向量操作
75
76 squareDiffVal = diffVal ** 2
77 squareDist = np.sum(squareDiffVal,1)
78 distance = squareDist ** 0.5
79
80 #对相关度进行排序,相关度由大到小(数值由小到大)
81 sortedDistIndices = np.argsort(distance)
82
83 classCount = {}
84 for i in range(k):
85
86 voteLabel = labels[sortedDistIndices[i]]
87 classCount[voteLabel] = classCount.get(voteLabel, 0) + 1
88
89 maxCount = 0
90 ansKey = None
91 for key, value in classCount.items():
92 if value > maxCount:
93 ansKey = key
94 maxCount = value
95 return ansKey
96
97 #保存文件
98 def saveData(dataSet):
99 np.savetxt(r'./musicF/dataSet.txt', dataSet)
100
101 #从文件中加载数据集并返回
102 def loadDataFromFile():
103 return np.loadtxt(r'./musicF/dataSet.txt')
104
105 #保存标签到文件
106 def saveLabels(labels):
107 f = open('./musicF/labels.txt','w', encoding="gbk")
108 f.write(' '.join(labels))
109 f.close()
110
111
112 #读取标签数据
113 def loadLabels():
114 f = open('./musicF/labels.txt','r', encoding="gbk")
115 labelsString = f.read()
116 f.close()
117 labels = labelsString.split(' ')
118 return labels
119
120
121 def classify(path):
122 features = getFeature(path)
123 #读取数据
124 dataSet = loadDataFromFile()
125 labels = loadLabels()
126 ans = kNNClassify(features, dataSet, 7, labels)
127 return ans
128
129 def main():
130 path = r'./musicF/test/CMJ - 告白之夜(纯音乐)(Cover:Ayasa绚沙).mp3'
131 audio = MP3(path)
132 print('音乐时长为:',audio.info.length)
133 features = getFeature(path)
134 print(features.shape)
135
136 dataSet, labels = loadDataSet()
137 #保存数据
138 saveData(dataSet)
139 saveLabels(labels)
140
141 # #读取数据
142 # dataSet = loadDataFromFile()
143 # labels = loadLabels()
144
145 ans = kNNClassify(features, dataSet, 7, labels)
146 print('labels = ', ans)
147
148 def addData():
149 dataSet, labels = loadDataSet()
150 #保存数据
151 saveData(dataSet)
152 saveLabels(labels)
153
154 if __name__ == '__main__':
155 #addData()
156 main()
python音乐分类--knn的更多相关文章
- 使用python模拟实现KNN算法
一.KNN简介 1.KNN算法也称为K邻近算法,是数据挖掘分类技术之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表. 2.KNN算法的核心思想是如果一个样本 ...
- 手写算法-python代码实现KNN
原理解析 KNN-全称K-Nearest Neighbor,最近邻算法,可以做分类任务,也可以做回归任务,KNN是一种简单的机器学习方法,它没有传统意义上训练和学习过程,实现流程如下: 1.在训练数据 ...
- 机器学习算法 - 最近邻规则分类KNN
上节介绍了机器学习的决策树算法,它属于分类算法,本节我们介绍机器学习的另外一种分类算法:最近邻规则分类KNN,书名为k-近邻算法. 它的工作原理是:将预测的目标数据分别跟样本进行比较,得到一组距离的数 ...
- python 文本分类
python 文本分类 pyhton 机器学习 待续...
- 13、Selenium+python+API分类总结
Selenium+python+API分类总结 http://selenium-python.readthedocs.org/index.html 分类 方法 方法描述 客户端操作 __init__( ...
- Python机器学习算法 — KNN分类
KNN简介 K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.KNN分类算法属于监督学习. 最简单最初级的分类器是将全部的训练 ...
- python实现简单分类knn算法
原理:计算当前点(无label,一般为测试集)和其他每个点(有label,一般为训练集)的距离并升序排序,选取k个最小距离的点,根据这k个点对应的类别进行投票,票数最多的类别的即为该点所对应的类别.代 ...
- 最邻近规则分类KNN算法
例子: 求未知电影属于什么类型: 算法介绍: 步骤: 为了判断未知实例的类别,以所有已知类别的实例作为参照 选择参数K 计算未知实例与所有已知实例的距离 选择最近K个已 ...
- 机器学习--最邻近规则分类KNN算法
理论学习: 3. 算法详述 3.1 步骤: 为了判断未知实例的类别,以所有已知类别的实例作为参照 选择参数K 计算未知实例与所有已知实例的距离 选 ...
- Python机器学习-分类
监督学习下的分类模型,主要运用sklearn实践 kNN分类器 决策树 朴素贝叶斯 实战一:预测股市涨跌 # -*- coding: utf-8 -*- """ Crea ...
随机推荐
- 浏览器打开微信小程序
function h5() { $wx = new Wx('appId', 'appSecret'); // \dump($wx->getAccessToken()); $url = 'http ...
- 基于ipset的dns代理
###基于源IP的dns白名单 sleep 60s/etc/init.d/firewall restart ###创建ipset集合 命名为src_dns_whitelist#清空原有命名为src_d ...
- ubuntu usb network card drive
通过 lsusb -t命令查看网卡型号 /: Bus 02.Port 1: Dev 1, class="root_hub", Driver=xhci_hcd/4p, 5000M | ...
- 【阿里云ACP】-03(数据库RDS)
OSS快速使用入门:创建Bucket 1.用户创建一个Bucket时,可以根据费用单价.请求来源分布.响应延迟等方面的考虑,为该bucket选择所在的数据中心 阿里云所有数据中心都提供OSS公众服务 ...
- java面试准备基础篇
1.Java中常用关键字和用途 synchronized: 加锁 transient 不参与序列化和反序列化 volatile 保证其他线程可见性,不保证原子性,禁止指令重排 2.hashCode() ...
- 3阶(次)贝塞尔曲线的JavaScript(JS)实现
php中文网数学符号的显示太差了,推荐看这里 贝塞尔曲线简介:贝塞尔曲线,是贝塞尔老爷子在使用电子计算机设计汽车零件的时候 进行曲面设计而采用的一种参数化的样条曲线. 一般参数方程: B(t) = \ ...
- C语言-链表流星雨(EsayX)
刷B站看到的,做个玩玩.IDE:Visual Studio 2022.依赖EsayX图形库 1-效果 2-程序 /* 链表流星雨单文件版本 依赖EsayX图形库 */ #include <std ...
- Java 18-方法 认识方法与方法定义
1.认识方法 1)什么是方法 Java方法是语句的集合,它们在一起执行一个功能; 方法是解决一类问题的步骤的有序组合; 方法一般包含于类中; 方法在程序中被创建,在其他地方被引用2 2)方法的有点 使 ...
- json转化 ts定义网页工具
json转化 ts定义 https://transform.tools/json-to-typescript
- sqlserver存储过程学习
存储过程学习 一.定义变量 --简单赋值 declare @a int set @a=5 print @a --使用select语句赋值 declare @user1 nvarchar ...