语音情感分析开发者必读之作,一定带来一个解决新方案( 六 )


# 充分混洗数据
bel = []
for i in range(len()):
bel.([[i],[i]])
for i in range(100):
.(bel)
with open('.pkl','wb') as f:
.dump(bel,f)
用交叉验证的方式来做SVM超参数的调优 。同时画出ROC曲线 。我做的结果不太对,以后得改一下 。
###############################################################################
# 画ROC曲线
###############################################################################
# 读入数据
with open('.pkl','rb') as f:
bel = .load(f)
= np.zeros((len(bel)))
= np.zeros((len(bel),len(bel[0][1])))
for i in range(len(bel)):
[i] = bel[i][0]
[i] = bel[i][1]
# 设置随机数种子
= np..(0)
# 使用n折交叉验证,并且画ROC曲线
# cv是分好了n折的样本序号,分成训练样本的序号、测试样本的序号
cv = (, =5)
= svm.SVC(='rbf', #=True,
=)#注意这里,=True,需要,不然预测的时候会出现异常 。另外rbf核效果更好些 。
= 0.0 # truerate
= np.(0, 1, ) # falserate
= []
for i, (train, test) in (cv):
# 通过训练数据,使用svm线性核建立模型,并对测试集进行测试,求出预测得分
#= .fit(X[train], y[train]).(X[test]) # 多分类任务无法生成概率值
= .fit([train], [train]).([test])
# 将预测结果转化为one-hot码矩阵
ot = ()
# 将正确标签转化为one-hot码矩阵
= ([test])
# 将多分类看做n个二分类任务,画n个ROC曲线
= 0
= 0
for j in range(len(set())):
#ROC curve and area the curve,通过()函数,求出fpr和tpr,以及阈值
fpr, tpr,= ([:,j], ot[:,j])
+= fpr
+= tpr
/= len(set())
/= len(set())
# 对在处进行插值,通过scipy包调用()函数
+= (, , ) # ()返回插值数据维度=的维度
[0] = 0.0#初始处为0
= auc(, )
#画图,只需要plt.plot(fpr,tpr),变量只是记录auc的值,通过auc()函数能计算出来
plt.plot(, , lw=1, label='ROC fold %d (area = %0.2f)' % (i, ))
plt.('log')
plt.xlim((1e-5,1))
#画对角线
#plt.plot([0, 1], [0, 1], '--', color=(0.6, 0.6, 0.6), label='Luck')
plt.('log')
plt.xlim((1e-5,1))
/= len(cv)#在个点,每个点处插值插值多次取平均
[-1] = 1.0#坐标最后一个点为(1,1)
= auc(, )#计算平均AUC值
#画平均ROC曲线
plt.plot(, , 'k--',label='Mean ROC (area = %0.2f)' % , lw=1)
#plt.xlim([-0.05, 1.05])
plt.ylim([0, 1])
plt.grid(True)
plt.('FalseRate')
plt.('TrueRate')
plt.title('')
plt.(loc="lower right")
plt.('ROC.png')
plt.show()
画分类器的混淆矩阵 。
###############################################################################
# 画混淆矩阵
###############################################################################
# 读入数据
with open('.pkl','rb') as f:
bel = .load(f)
= np.zeros((len(bel)))
= np.zeros((len(bel),len(bel[0][1])))
for i in range(len(bel)):
[i] = bel[i][0]
[i] = bel[i][1]
= svm.SVC(='rbf',gamma='auto')
= .fit(, ).()
= list(set())
= (, ,= )
(, '.png')
from
numpy as np
fromio, color
from PILImage, ,
os
def (, ):
#color for
lines, cols = .shape
= .sum(axis=1).(lines, 1)
=/
= 1 -
= .(100).(lines, -1).(100, axis=0)
io.(, color.())
# Drawon every block
image = Image.open()
draw = .Draw(image)
#font = .(os.path.join(os.(), "draw/ARIAL.TTF"), 15)