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 ...
随机推荐
- [笔记] 什么是Groovy?什么是Kotlin?
关于Groovy 参考文章 https://www.w3cschool.cn/groovy/ 摘抄如下: Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行 Jav ...
- SVN: E155004: THERE ARE UNFINISHED WORK ITEMS IN ''; RUN 'SVN CLEANUP' FIRST
eclipse的SVN更新或者还原都报错 使用clean up也不好用 解决办法 通过网址https://www.sqlite.org/download.html下载这个软件 解压放到.svn文件夹下 ...
- 博客神器Gridea
博客神器Gridea Gridea 温故而知新 Gridea 最早叫 Hve Notes ,开发者为了更易读和好记,重新命名为 Gridea,支持 Windows 和 Mac 平台,他的基础界面非常的 ...
- 几十行代码实现简易版koa~
application.js const http = require("http")// 洋葱模型 function compose(middleware){ return fu ...
- k8s_使用k8s部署博客系统deployment(四)
mysql deployment 前面的nfs pv pvc secret configmap service等k8s对象已经创建好了,准备工作已经完成:现在可以开始准备deployment配置文件 ...
- Markdown中如何让# * >等符号原样显示,不转义解析成对应Markdown语法
加\转义: * markdown 中如果遇到有字符与原有语法冲突, 可以使用反引号"`"包裹需要转移的内容. * 反引号位于键盘左上角Esc下面的位置 示例: # * > 原 ...
- 微信小程序级联选择器省市区选择器部分安卓手机兼容的问题:无法只选省份,必须选择到市
代码片段: 1 <view class="item"> 2 <view class="i-name"><text class=&q ...
- Linux firewall 命令
常用命令 开启端口命令 firewall-cmd --zone=public--add-port=443/tcp --permanent --zone #作用域 --add-port=80/tcp ...
- vs2019 常用数据结构 纯C语言 头文件实现 (持续更新改错中)单链表,
1.单链表: 1 #pragma once 2 #ifndef _List_H 3 #include<stdio.h> 4 #include<stdlib.h> 5 #defi ...
- K8S informer机制
一.informer介绍 Kubernetes基于声明式API的设计理念,所谓声明式API,即告诉Kubernetes Controller资源对象的期望状态,这样为Kubernetes在事件通知后, ...