人脸数据集:
Olivetti人脸数据集是1900年由ATT剑桥实验室收集。这个数据集包含40个不同受试者在不同时间、不同光照情况下的面部图像。此外,受试者也有不同的面部表情和面部细节。
接下来图像被量化到256的灰度值。一共40个不同的标签。人脸识别是一个多类分类的任务。
# 开发时间:2022/9/7 20:12
# 开发内容:
# 运行环境:
# 备注内容:使用随机森林实现人脸识别
import cv2
from sklearn.datasets import fetch_olivetti_faces
import numpy as np
import matplotlib.pyplot as plt
import pylab
from sklearn.model_selection import train_test_split
import cv2
from sklearn.metrics import accuracy_score
if __name__=='__main__':
dataset=fetch_olivetti_faces()
X=dataset.data
Y=dataset.target
np.random.seed(21)
idx_rand=np.random.randint(len(X),size=8)
n_samples,n_features=X.shape[:2]
X-=X.mean(axis=0)
X-=X.mean(axis=1).reshape(n_samples,-1)
for p,i in enumerate(idx_rand):
plt.subplot(2,4,p+1)
plt.imshow(X[i,:].reshape((64,64)),cmap='gray')
plt.axis('off')
pylab.show()
X_train,X_test,y_train,y_test=train_test_split(X,Y,random_state=21)
rtree=cv2.ml.RTrees_create()
rtree.setMaxCategories(len(np.unique(Y)))
rtree.setMaxDepth(2000)
rtree.setMinSampleCount(2 )
num_trees=100
eps=0.01
criteria=(cv2.TERM_CRITERIA_MAX_ITER+cv2.TERM_CRITERIA_EPS,num_trees,eps)
rtree.setTermCriteria(criteria)
rtree.train(X_train,cv2.ml.ROW_SAMPLE,y_train);
_,y_hat=rtree.predict(X_test)
a=accuracy_score(y_test,y_hat)
print(a)
掉包,scikitlearn中数据分割数据集,cv2随机深林。其中节点分裂数量:
人tree。setMinsamplecount(2)
和深度数目rtree.setmaxdepth(1000)是不可少的参数。
实验结果0.91