利用python实现svm5维交叉验证 源代码


import numpy as np
from sklearn import svm
import h5py
import math
# import scipy.io
# data = scipy.io.loadmat('D:\matlab\dataset and results\Yeast\data_DCT.mat')
# data=np.array(data['data_DCT'])
data = h5py.File('D:\data_DCT_PCA.mat')
data = np.transpose(data['data_DCT'])
target = np.zeros((data.shape[0],1))
data2 = np.zeros((data.shape[0],data.shape[1]-1))
for i in range(data.shape[0]):
	for j in range(data.shape[1]-1):
		data2[i][j]=data[i][j+1]

for i in range(0,data.shape[0]):
	target[i][0]=data[i][0]
flodnum=5
permutation = np.random.permutation(target.shape[0])
data2 = data2[permutation,:]
target = target[permutation]
length=int((data2.shape[0])/flodnum)
length1=int((target.shape[0])/flodnum)
data2_1=data2[1:length,:]
data2_2=data2[length+1:length*2,:]
data2_3=data2[length*2+1:length*3,:]
data2_4=data2[length*3+1:length*4,:]
data2_5=data2[length*4+1:length*5,:]
########################################
target_1=target[1:length,:]
target_2=target[length+1:length*2,:]
target_3=target[length*2+1:length*3,:]
target_4=target[length*3+1:length*4,:]
target_5=target[length*4+1:length*5,:]
#####################################   1
X_train=np.row_stack((data2_2,data2_3,data2_4,data2_5))
X_test=data2_1
y_train=np.row_stack((target_2,target_3,target_4,target_5))
y_test=target_1
#, X_test, y_train, y_test = train_test_split(data2_1, target_1, test_size=0.40, random_state=0)
cls = svm.SVC(kernel='rbf', C=0.5,gamma=10)
cls.fit(X_train,y_train)
y_hat = cls.predict(X_test)
y_hat=y_hat.reshape(y_test.shape[0],1)
TP = 0
FP = 0
TN = 0
FN = 0
for i in range(y_test.shape[0]):
	if y_hat[i][0]==y_test[i][0]==1:
		TP=TP+1
	if y_hat[i][0]==y_test[i][0]==-1:
		TN=TN+1
	if y_hat[i][0]==1 and y_test[i][0]==-1:
		FP=FP+1
	if y_hat[i][0]==-1 and y_test[i][0]==1:
		FN=FN+1
ACC=(TP+TN)/(TP+TN+FP+FN)
SN=TP/(TP+FN)
PE=TP/(TP+FP)
MCC=((TP*TN)-(FP*FN))/(math.sqrt((TP+FN)*(TN+FP)*(TP+FP)*(TN+FN)))
print("1:")
print(ACC,SN,PE,MCC)
#####################################2
#####################################   1
X_train=np.row_stack((data2_1,data2_3,data2_4,data2_5))
X_test=data2_2
y_train=np.row_stack((target_1,target_3,target_4,target_5))
y_test=target_2
#, X_test, y_train, y_test = train_test_split(data2_1, target_1, test_size=0.40, random_state=0)
cls = svm.SVC(kernel='rbf', C=0.5,gamma=10)
cls.fit(X_train,y_train)
y_hat = cls.predict(X_test)
y_hat=y_hat.reshape(y_test.shape[0],1)
TP = 0
FP = 0
TN = 0
FN = 0
for i in range(y_test.shape[0]):
	if y_hat[i][0]==y_test[i][0]==1:
		TP=TP+1
	if y_hat[i][0]==y_test[i][0]==-1:
		TN=TN+1
	if y_hat[i][0]==1 and y_test[i][0]==-1:
		FP=FP+1
	if y_hat[i][0]==-1 and y_test[i][0]==1:
		FN=FN+1
ACC=(TP+TN)/(TP+TN+FP+FN)
SN=TP/(TP+FN)
PE=TP/(TP+FP)
MCC=((TP*TN)-(FP*FN))/(math.sqrt((TP+FN)*(TN+FP)*(TP+FP)*(TN+FN)))
print("2:")
print(ACC,SN,PE,MCC)
######################################3
#####################################   1
X_train=np.row_stack((data2_1,data2_2,data2_4,data2_5))
X_test=data2_3
y_train=np.row_stack((target_1,target_2,target_4,target_5))
y_test=target_3
#, X_test, y_train, y_test = train_test_split(data2_1, target_1, test_size=0.40, random_state=0)
cls = svm.SVC(kernel='rbf', C=0.5,gamma=10)
cls.fit(X_train,y_train)
y_hat = cls.predict(X_test)
y_hat=y_hat.reshape(y_test.shape[0],1)
TP = 0
FP = 0
TN = 0
FN = 0
for i in range(y_test.shape[0]):
	if y_hat[i][0]==y_test[i][0]==1:
		TP=TP+1
	if y_hat[i][0]==y_test[i][0]==-1:
		TN=TN+1
	if y_hat[i][0]==1 and y_test[i][0]==-1:
		FP=FP+1
	if y_hat[i][0]==-1 and y_test[i][0]==1:
		FN=FN+1
ACC=(TP+TN)/(TP+TN+FP+FN)
SN=TP/(TP+FN)
PE=TP/(TP+FP)
MCC=((TP*TN)-(FP*FN))/(math.sqrt((TP+FN)*(TN+FP)*(TP+FP)*(TN+FN)))
print("3:")
print(ACC,SN,PE,MCC)
########################################4
#####################################   1
X_train=np.row_stack((data2_1,data2_2,data2_3,data2_5))
X_test=data2_4
y_train=np.row_stack((target_1,target_2,target_3,target_5))
y_test=target_4
#, X_test, y_train, y_test = train_test_split(data2_1, target_1, test_size=0.40, random_state=0)
cls = svm.SVC(kernel='rbf', C=0.5,gamma=10)
cls.fit(X_train,y_train)
y_hat = cls.predict(X_test)
y_hat=y_hat.reshape(y_test.shape[0],1)
TP = 0
FP = 0
TN = 0
FN = 0
for i in range(y_test.shape[0]):
	if y_hat[i][0]==y_test[i][0]==1:
		TP=TP+1
	if y_hat[i][0]==y_test[i][0]==-1:
		TN=TN+1
	if y_hat[i][0]==1 and y_test[i][0]==-1:
		FP=FP+1
	if y_hat[i][0]==-1 and y_test[i][0]==1:
		FN=FN+1
ACC=(TP+TN)/(TP+TN+FP+FN)
SN=TP/(TP+FN)
PE=TP/(TP+FP)
MCC=((TP*TN)-(FP*FN))/(math.sqrt((TP+FN)*(TN+FP)*(TP+FP)*(TN+FN)))
print("4:")
print(ACC,SN,PE,MCC)
#############################################5
#####################################   1
X_train=np.row_stack((data2_1,data2_2,data2_3,data2_4))
X_test=data2_5
y_train=np.row_stack((target_1,target_2,target_3,target_4))
y_test=target_5
#, X_test, y_train, y_test = train_test_split(data2_1, target_1, test_size=0.40, random_state=0)
cls = svm.SVC(kernel='rbf', C=0.5,gamma=10)
cls.fit(X_train,y_train)
y_hat = cls.predict(X_test)
y_hat=y_hat.reshape(y_test.shape[0],1)
TP = 0
FP = 0
TN = 0
FN = 0
for i in range(y_test.shape[0]):
	if y_hat[i][0]==y_test[i][0]==1:
		TP=TP+1
	if y_hat[i][0]==y_test[i][0]==-1:
		TN=TN+1
	if y_hat[i][0]==1 and y_test[i][0]==-1:
		FP=FP+1
	if y_hat[i][0]==-1 and y_test[i][0]==1:
		FN=FN+1
ACC=(TP+TN)/(TP+TN+FP+FN)
SN=TP/(TP+FN)
PE=TP/(TP+FP)
MCC=((TP*TN)-(FP*FN))/(math.sqrt((TP+FN)*(TN+FP)*(TP+FP)*(TN+FN)))
print("5:")
print(ACC,SN,PE,MCC)

代码傻瓜式操作 但是很好理解

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值