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的更多相关文章

  1. 使用python模拟实现KNN算法

    一.KNN简介 1.KNN算法也称为K邻近算法,是数据挖掘分类技术之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表. 2.KNN算法的核心思想是如果一个样本 ...

  2. 手写算法-python代码实现KNN

    原理解析 KNN-全称K-Nearest Neighbor,最近邻算法,可以做分类任务,也可以做回归任务,KNN是一种简单的机器学习方法,它没有传统意义上训练和学习过程,实现流程如下: 1.在训练数据 ...

  3. 机器学习算法 - 最近邻规则分类KNN

    上节介绍了机器学习的决策树算法,它属于分类算法,本节我们介绍机器学习的另外一种分类算法:最近邻规则分类KNN,书名为k-近邻算法. 它的工作原理是:将预测的目标数据分别跟样本进行比较,得到一组距离的数 ...

  4. python 文本分类

    python 文本分类 pyhton 机器学习 待续...

  5. 13、Selenium+python+API分类总结

    Selenium+python+API分类总结 http://selenium-python.readthedocs.org/index.html 分类 方法 方法描述 客户端操作 __init__( ...

  6. Python机器学习算法 — KNN分类

    KNN简介 K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.KNN分类算法属于监督学习. 最简单最初级的分类器是将全部的训练 ...

  7. python实现简单分类knn算法

    原理:计算当前点(无label,一般为测试集)和其他每个点(有label,一般为训练集)的距离并升序排序,选取k个最小距离的点,根据这k个点对应的类别进行投票,票数最多的类别的即为该点所对应的类别.代 ...

  8. 最邻近规则分类KNN算法

    例子: 求未知电影属于什么类型: 算法介绍: 步骤:  为了判断未知实例的类别,以所有已知类别的实例作为参照      选择参数K      计算未知实例与所有已知实例的距离      选择最近K个已 ...

  9. 机器学习--最邻近规则分类KNN算法

    理论学习: 3. 算法详述        3.1 步骤:      为了判断未知实例的类别,以所有已知类别的实例作为参照      选择参数K      计算未知实例与所有已知实例的距离      选 ...

  10. Python机器学习-分类

    监督学习下的分类模型,主要运用sklearn实践 kNN分类器 决策树 朴素贝叶斯 实战一:预测股市涨跌 # -*- coding: utf-8 -*- """ Crea ...

随机推荐

  1. <input> oninput事件

    该事件在 <input> 或 <textarea> 元素的值发生改变时触发.onkeyup事件:在iphone(ios)中文输入会触发不到

  2. C++11之线程库

    在 C++11 之前,涉及到多线程问题,都是和平台相关的,比如 Windows 和 Linux 下各有自己的接口,这使得代码的可移植性比较差.C++11 中最重要的特性就是对线程进行支持了,并且可以跨 ...

  3. Spring Boot应用启动

    1.Eclipse 中启动Spring Boot应用 右键应用程序启动类, Run As Java Application 2.maven 命令: mvn spring-boot:run 在应用程序启 ...

  4. Windows 10 与Windows11 功能比较(红字为不同点)

    Windows 10 与Windows11 功能比较(红字为不同点)

  5. ES bool查询

    一.bool查询包含四种操作 1.must 2.must not 3.filter 4.should 二.功能 1.must 对应mysql的 and a= 2.must not 对应mysql的 a ...

  6. [CSP-S2019] Emiya 家今天的饭

    洛咕 题意:原题面见链接,简单来说就是给出一个\(n*m\)的矩阵,每一行代表同一种烹饪方法,每一列代表同一种食材,\(a_{i,j}\)表示使用第i种烹饪方法第j种食材能做出多少种菜,要求至少做一道 ...

  7. Iframe 默认高度、宽度

    项目中还在使用 Iframe ,一次看代码时发现 Iframe 没有指定高度.宽度,可是在页面上显示的时候却有高度.宽度.想着应该是 Iframe 的默认值,于是写了一个简单的页面,代码如下: 1 & ...

  8. JAVA课程设计(附源码)

    Java课程设计选题 Java课程设计说明 本次课程设计的目的是通过课程设计的各个项目的综合训练,培养学生实际分析问题.编程和动手能力,提高学生的综合素质.本课程设计尝试使用一些较生动的设计项目,激发 ...

  9. pdf2docx:可将 PDF 转换成 docx 文件的 Python 库

    pdf2docx:https://github.com/dothinking/pdf2docx 可将 PDF 转换成 docx 文件的 Python 库. from pdf2docx import p ...

  10. unity002

    物体轴心点变换 轴向变换 预览 暂停 逐帧播放 坐标 世界坐标 物体坐标 mesh 网格决定形状 渲染