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 ...
随机推荐
- ref(代替id)
App.vue <template> <div> <Student ref="str"/> <h3 v-text="age&qu ...
- :)模型保存为单一个pb文件
模型保存为单一个pb文件 背景 参考连接: https://www.yuque.com/g/jesse-ztr2k/nkke46/ss4rlv/collaborator/join?token=XUVZ ...
- flink 版本
从1.10.0开始,flink版本是一个分界线,所以如果用>1.10版本的特性,一些flink引用可以从1.10官网文档中查 后面版本中没有这些说明了. flink代码文档地址:https:// ...
- (K8s学习笔记七)Pod的升级和回滚
1.Deployment的升级 示例:滚动升级busybox-deployment容器 apiVersion: apps/v1 kind: Deployment metadata: name: bus ...
- Android studio java文件显示j爆红
今天在android studio打开一个原来的工程,此工程是很久以前使用eclipse创建的,在android studio下有些问题需要解决. 1.设置project的jdk, 2.设置modul ...
- TODO留学小程序,展开,收起失效
text设置user-select=true后,display: -webkit-box 失效? https://developers.weixin.qq.com/community/develop/ ...
- Django新版本报错问题解决
在创建app的时候会报如下错误: python3 manage.py startapp test django.core.exceptions.ImproperlyConfigured: SQLite ...
- How to Fix SSH Failed Permission Denied
https://phoenixnap.com/kb/ssh-permission-denied-publickey
- django项目中使用swagger来实现接口文档自动生成
一.Swagger 一般我们在对接前后端的时候,都需要提供相应的接口文档.对于后端来说,编写接口文档即费时费力,还会经常因为没有及时更新,导致前端对接时出现实际接口与文档不一致.而且手写接口文档还容易 ...
- C++future promise
A future is an object that can retrieve a value from some provider object or function, properly sync ...