SVM深入理解&人脸特征提取
人工智能与机器学习第8周作业
1. 深入了解SVM算法在解决线性不可分类时,对特征集进行多项式、核函数转换(升维)将其转换为线性可分类问题的思想。完成以下任务: 对照参考资料“支持向量机-课件-518.docx”,将其中的例子代码在Jupyter中重新做一遍。并将例子代码中采用多项式分类函数、高斯核函数对鸢尾花、月亮数据集进行SVM训练所得到最终分类决策函数,输出出来。
支持向量机-课件-518.docx下载
2. 以人脸识别(属于分类问题)为例,理解实际应用中的特征数据集提取。
1)用python3+opencv3.4+dlib库编程,打开摄像头,实时采集人脸并保存、绘制68个特征点;
2)不在原视频上绘制显示特征点,而是给人脸虚拟P上一付墨镜(提示:找到双眼特征点坐标值,以坐标中心点为圆心,用opencv函数绘制两个圆,并填充黑色)
目录
一、SVM深入理解
1. 支持向量机
在上一篇博客中有引用百度百科的定义线性判别准则与线性分类编程实践
2.重做鸢尾花
1.多项式核
- 导入包
## 导入包
from sklearn import datasets #导入数据集
from sklearn.svm import SVC #导入svm
from sklearn.pipeline import Pipeline #导入python里的管道
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler#导入标准化
#多项式核svm
from sklearn import datasets #导入数据集
from sklearn.svm import LinearSVC #导入线性svm
from sklearn.pipeline import Pipeline #导入python里的管道
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler,PolynomialFeatures #导入多项式回归和标准化
- 定义
scaler=StandardScaler()# 标准化
scaler.fit(data_x)#计算训练数据的均值和方差
data_x=scaler.transform(data_x) #再用scaler中的均值和方差来转换X,使X标准化
liner_svc=LinearSVC(C=1e9,max_iter=100000)#线性svm分类器,iter是迭达次数,c值决定的是容错,c越大,容错越小
liner_svc.fit(data_x,data_y)
- 边界绘制函数
# 边界绘制函数
def plot_decision_boundary(model,axis):
x0,x1=np.meshgrid(
np.linspace(axis[0],axis[1],int((axis[1]-axis[0])*100)).reshape(-1,1),
np.linspace(axis[2],axis[3],int((axis[3]-axis[2])*100)).reshape(-1,1))
# meshgrid函数是从坐标向量中返回坐标矩阵
x_new=np.c_[x0.ravel(),x1.ravel()]
y_predict=model.predict(x_new)#获取预测值
zz=y_predict.reshape(x0.shape)
custom_cmap=ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])
plt.contourf(x0,x1,zz,cmap=custom_cmap)
- 读取鸢尾花数据集
#读取鸢尾花数据集
data=datasets.load_iris()
data_x=data.data
data_y=data.target
- 显示鸢尾花数据集
plt.scatter(data_x[data_y==0,0],data_x[data_y==0,1])
plt.scatter(data_x[data_y==1,0],data_x[data_y==1,