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. FFmpeg转换直播流格式

    mp4转rtsp ffmpeg -re -i 1671680590843.mp4 -vcodec copy -acodec copy -f rtsp rtsp://localhost:8554/liv ...

  2. sqoop,hive2mysql

    sqoop export \ --connect jdbc:mysql://master:3306/testdb \ --username hive \ --password 123456 \ --t ...

  3. 回溯-1-N皇后(Backtracking-1-N Queens)

    #include <stdio.h> #define N 4 enum bool {TRUE, FALSE}; void print_Q(int *Q) { int i; for (i = ...

  4. java 基本知识点

    多线程 加载器 数据结构 内存模型 gc算法

  5. 使用Visual Studio工具将ActiveX控件的COM类库转换为窗体控件

    1:转换目的 Windows窗体只能继承Windows 窗体控件.如果要承载ActiveX控件,必须生成AxHost派生的包装器控件. 在使用WPF呈现ActiveX控件的时候,需要将com类库(oc ...

  6. 使用Certbot申请证书

    使用certbot申请*通配符证书,使用letsencrypt证书服务,使用DNS方式手动验证 certbot certonly --preferred-challenges dns --manual ...

  7. element-ui中el-table设置多选checkbox时,selection-change重复执行,以及选不中问题

    项目中使用了elementUI中el-table的选择框.在另外一个地方展示选中的行的数量.设置显示数量之后,选择框就无法选中,change事件执行两次. 解决办法:给el-table设置row-ke ...

  8. Kubernetes基础配置管理

    一.ConfigMap创建 1-1.基于目录创建ConfigMap 首先创建一个configmap/conf存储目录,分别建立.conf文件 mkdir /configmap/conf #创建.con ...

  9. plsql和instantclient版本都对,依然不能初始化oci.dll解决办法

    这里写到 "初始化错误,不能初始化 oci.dll, 请确认你安装的是64位的Oracle客户端 " ,这个描述还是非常的到位啊,我一检查,果然下载的客户端是32位的,在确保自己的 ...

  10. vue3中使用vite-ts构建项目时tsconfig.json的配置

    在上一次创建vue3项目在tsconfig.json中配置了文件别名以后,格式校验提示 es3什么鬼,便去看了一下tsconfig.json的配置,以此学习 { "compilerOptio ...