python sklearn 支持向量机_在sklearn中如何利用python获取svm算法的置信度

这篇博客讲述了如何使用PCA进行特征降维,然后利用SVM进行人脸识别的步骤。作者首先从目录中读取图像,进行预处理,通过Haar级联分类器检测脸部,接着使用PCA进行主成分分析,再用SVM进行训练和预测。在预测阶段,遇到了`clf.score()`函数调用错误,尝试了不同参数组合,但未能解决问题。
摘要由CSDN通过智能技术生成

我想获得自信,但当我尝试clf.score(X_test)时,我得到了以下错误:TypeError: score() takes at least 3 arguments (2 given)

这是我的代码:import cv2, os

from numpy import *

import numpy as np

from PIL import Image

from sklearn.decomposition import PCA

from sklearn.decomposition import RandomizedPCA

from sklearn.naive_bayes import GaussianNB

import matplotlib.pyplot as plt

from sklearn.svm import SVC

cascadeLocation = "haarcascade_frontalface_default.xml"

faceCascade = cv2.CascadeClassifier(cascadeLocation)

def prepare_dataset(directory):

paths = [os.path.join(directory, filename) for filename in os.listdir(directory)]

images = []

labels = []

row = 140

col = 140

for image_path in paths:

image_pil = Image.open(image_path).convert('L')

image = np.array(image_pil, 'uint8')

nbr = int(os.path.split(image_path)[-1].split('.')[1])

print(nbr)

faces = faceCascade.detectMultiScale(image)

for (x,y,w,h) in faces:

images.append(image[y:y+col,x:x+row])

labels.append(nbr)

cv2.imshow("Reading Faces ",image[y:y+col,x:x+row])

cv2.waitKey(50)

return images,labels, row, col

directory = 'dataset'

directory2 = 'dataset2'

images, labels, row, col = prepare_dataset(directory)

n_components = 10

cv2.destroyAllWindows()

pca = PCA(n_components=n_components, whiten=True)

param_grid = {'C': [1e3, 5e3, 1e4, 5e4, 1e5],

'gamma': [0.0001, 0.0005, 0.001, 0.005, 0.01, 0.1], }

clf = SVC(kernel='rbf', class_weight='balanced')

testing_data = []

for i in range(len(images)):

testing_data.append(images[i].flatten())

pca = pca.fit(testing_data)

transformed = pca.transform(testing_data)

clf.fit(transformed,labels)

image_paths = [os.path.join(directory2, filename) for filename in os.listdir(directory2)]

la=[]

for image_path in image_paths:

pred_image_pil = Image.open(image_path).convert('L')

pred_image = np.array(pred_image_pil, 'uint8')

faces = faceCascade.detectMultiScale(pred_image)

for (x,y,w,h) in faces:

temp=np.array(pred_image[y:y+col,x:x+row]).reshape((1, -1))

X_test = pca.transform(temp)

id = clf.predict(X_test)

#a=clf.score(X_test)

if(id==1):

id="john"

elif(id==2):

id="brad"

elif(id==3):

id="scr"

elif(id==4):

id="natalie portman"

elif(id==5):

id="jennifer lawrence"

elif(id==6):

id="van diesel"

elif(id==7):

id="jennifer aniston"

elif(id==8):

id="leonardo dicaprio"

else :

id="unknown"

print(id)

cv2.imshow("Recognizing Face", pred_image[y: y + h, x: x + w])

cv2.waitKey(1000)

cv2.destroyAllWindows()

我也试过clf.score(X_test,id)。在本例中,所有置信度取值1.0。在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python使用支持向量机SVM)进行多分类可以使用以下两种方法: 1. 一对一(OvO)方法:该方法将每个类别之间的所有可能组合都训练为一个二分类SVM模型。例如,对于N个类别,需要训练(N*(N-1))/2个SVM模型。当进行预测时,将样本输入到这些模型进行预测,最后根据预测结果进行投票决策。 以下是使用sklearn库实现OvO的示例代码: ```python from sklearn import datasets from sklearn.multiclass import OneVsOneClassifier from sklearn.svm import SVC # 加载数据集 iris = datasets.load_iris() X = iris.data y = iris.target # 使用OvO方法训练SVM模型 svm_ovo = OneVsOneClassifier(SVC()).fit(X, y) # 进行预测 y_pred = svm_ovo.predict(X) ``` 2. 一对其余(OvR)方法:该方法将每个类别分别与其他所有类别组合训练为一个二分类SVM模型。例如,对于N个类别,需要训练N个SVM模型。当进行预测时,将样本输入到这些模型进行预测,最后选取具有最高置信度的预测结果作为最终分类结果。 以下是使用sklearn库实现OvR的示例代码: ```python from sklearn import datasets from sklearn.multiclass import OneVsRestClassifier from sklearn.svm import SVC # 加载数据集 iris = datasets.load_iris() X = iris.data y = iris.target # 使用OvR方法训练SVM模型 svm_ovr = OneVsRestClassifier(SVC()).fit(X, y) # 进行预测 y_pred = svm_ovr.predict(X) ``` 需要注意的是,以上两种方法都只是SVM的一种实现方式。在实际应用,还需要根据具体情况选择其他的分类算法和方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值