源码分析来源:datawhalechina
https://github.com/datawhalechina/machine-learning-toy-code/blob/main/ml-with-sklearn/SVM/SVM.ipynb
一、支持向量机含义:
SVM可以理解成为一个线性分类器(多分类?)。https://zhuanlan.zhihu.com/p/49331510
二、支持向量机分类:
* 1、线性SVM:
其中是一个含有d个元素的列向量,即∈';是标量,y∈+1,-1,=+1时Xi属于正类别,Yi=-1时Xi属于负类别。
*核心代码备注补充:e.g., model_linear = svm.SVC(kernel='linear', C = 0.001)
① C:默认值是1.0:C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。
② kernel: str参数;默认为‘rbf’
算法中采用的核函数类型,可选参数有:
-‘linear’:线性核函数
-‘poly’:多项式核函数
-‘rbf’:径像核函数/高斯核
-‘sigmod’:sigmod核函数
-‘precomputed’:核矩阵
* np.c_:np.c_是按列连接两个矩阵,就是把两矩阵左右相加,要求行数相等。https://www.cnblogs.com/fcfc940503/p/10966651.html
* numpy中的ravel()、flatten()、squeeze()都有将多维数组转换为一维数组的功能,区别:https://blog.csdn.net/tymatlab/article/details/79009618
-ravel():如果没有必要,不会产生源数据的副本
-flatten():返回源数据的副本
-squeeze():只能对维数为1的维度降维
另外,reshape(-1)也可以“拉平”多维数组
* 2、多项式SVM:https://blog.csdn.net/github_39261590/article/details/75009069,https://blog.csdn.net/weixin_41990278/article/details/93137009
核心代码备注补充:model_poly=svm.SVC(C=0.0001,kernel='poly',degree=degree)
-degree: int型参数 默认为3:这个参数只对多项式核函数有用,是指多项式核函数的阶数n。如果给的核函数参数是其他核函数,则会自动忽略该参数。
* 3、高斯核SVM:
核心代码备注补充:model_rbf=svm.SVC(kernel='rbf',gamma=gamma,C=0.0001).fit(data,label)
-gamma: float参数 默认为auto:核函数系数,只对‘rbf’,‘poly’,‘sigmod’有效。如果gamma为auto,代表其值为样本特征数的倒数,即1/n_features.
三、数据实验:
* 1、代码备注补充:
- transform=transforms.ToTensor:transforms.ToTensor()函数的作用是将原始的PILImage格式或者numpy.array格式的数据格式化为可被pytorch快速处理的张量类型。https://blog.csdn.net/cangafuture/article/details/120541447
(这段实验代码我觉得特别好!!!感悟常看常新!)