包含二次判别分类器源代码的词条(2024-05-27)
admin 发布:2024-05-27 22:57 195
本篇文章给大家谈谈二次判别分类器源代码,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、二次函数判别式是什么?
- 2、如何对图像做分类器训练matlab代码
- 3、sklearn文档 — 1.2. 线性与二次判别分析法
- 4、线性和二次判别分析
- 5、求一完整的SVM分类器的程序,matlab编写的。感激不尽。。。。
二次函数判别式是什么?
一元二次方程ax^2+bx+c=0(a≠0)的根的判别式是b^2-4ac,用“Δ”表示(读做“delta”)。
一元二次方程判别式的应用
(1)解方程,判别一元二次方程根的情况.
它有两种不同层次的类型:
①系数都为数字;
②系数中含有字母;
③系数中的字母人为地给出了一定的条件.
(2)根据一元二次方程根的情况,确定方程中字母的取值范围或字母间关系.
(3)应用判别式证明方程根的情况(有实根、无实根、有两不等实根、有两相等实根)
判别式法
代数判别式(△法)和三角判别法(δ法),它们是二次方程ax^2 + bx + c = 0和三角方程asinx + bcosx = c的根的判别定理。
其来源是二次函数y = x^2和三角函数y = sinx的值域。
1、代数判别式法(△法)
设f(x)=ax^2 + bx + c(a≠0),则△=b^2 - 4ac叫做二次方程f(x)=0或二次函数f(x)的判别式。
判别定理:实系数二次方程ax^2 + bx + c = 0(a≠0)根的情况分类如下:
①△>0等价于有两个不相等的实数根;②△=0等价于有两个相等的实数根;③△<0等价于有共轭二虚根。
应用判别式△解题的方法叫做代数判别式法,简记为△法。
2、三角判别法(δ法)
δ=a^2 + b^2 - c^2叫作三角方程asinx + bcosx = c(a^2 + b^2≠0)的判别式。
判别定理:三角方程asinx + bcosx = c(a^2 + b^2≠0)在x∈R上有解得情况分类如下:
①有两条解终边等价于δ>0;②有一条解终边等价于δ=0;③没有实数解等价于δ<0。
应用三角判别式δ或根据∣sinx∣≤1 ,∣cosx∣≤1解题的方法叫做三角判别法(δ法)。
如何对图像做分类器训练matlab代码
对图像做分类器训练要建立视觉词袋来进行图像分类。该过程生成用来表示图像视觉词的直方图,通过这些直方图来训练图像分类器。下面的步骤描述如何建立图像集,建立视觉词袋,以及训练和运用图像分类器。
第一步:建立图像类别集合
将图像分割成训练子集和测试子集。利用imageDatastore函数来存储训练分类器的图像。可以利用splitEachLabel函数将图像分割成训练数据和测试数据。
读取类别图像和创建图像子集
setDir = fullfile(toolboxdir('vision'),'visiondata','imageSets');
imds = imageDatastore(setDir,'IncludeSubfolders',true,'LabelSource','foldernames');
分割图集成训练和测试子集。下例中,30%作为训练数据,余下的作为测试数据。
[trainingSet,testSet] = splitEachLabel(imds,0.3,'randomize');
第二步:建立特征词袋
通过从每个类别的有代表性的图像中提取特征描述符,创建视觉词汇表或特征包。
通过在训练集合中提取出的特征描述符上利用k-means聚类算法,bagOfFeatures对象定义特征,视觉词汇。该算法迭代地将描述符分成k个互斥簇。由此产生的簇是紧密的,并具有相似的特性。每个集群中心代表一个特征,或一个可视词。可以基于特征检测器提取特征,也可以定义一个网格来提取特征描述符。网格方法可能丢失细节信息。因此,对不包含明显特征的图像使用网格,例如海滩等景物的图像。使用Speed up robust features(或SURF)检测器提供更大的尺度不变性。默认情况下,该算法运行“网格”方法。
该算法工作流对图像进行整体分析。图像必须有适当的标签来描述它们所代表的类。例如,一组汽车图像可以被标记为汽车。工作流不依赖于空间信息,也不依赖于标记图像中的特定对象。视觉词袋技术依赖于非局部化的检测技术。
第三步:通过视觉词袋训练图像分类器
trainImageCategoryClassifier函数返回一个图像分类器。该方法使用基于2分类支持向量机(SVM)的error-correcting output codes(ECOC)框架来训练一个多分类器。
该方法利用bagOfFeatures对象返回的视觉词袋将图像集中的图像编码成视觉词直方图。然后将视觉词直方图作为训练分类器的正负样本。
1、将训练集中的每幅图像利用bagOfFeature的encode方法进行编码。该函数检测和提取图像中的特征,然后利用最近邻算法构造每个图像的特征直方图。函数将描述符逼近聚类中心来增加直方图各bin的数值。直方图的长度取决于bagOfFeatures对象构造的出来的视觉词的数量。最终将直方图作为图像的特征向量。
2、对训练集中的每幅图像重复步骤1,建立训练数据
3、评价分类器。在测试图像集上使用imagecategoryclassifier的evaluate方法测试分类器。输出混淆矩阵可以分析预测结果。理想的分类结果是对角线上包含一个标准矩阵。不正确的分类导致出现分数值。
第四步:对图像或图像集进行分类
最后使用imageCategoryClassifier 的predeict方法对新图像进行分类来确定其类型。
sklearn文档 — 1.2. 线性与二次判别分析法
线性判别分析法( discriminant_analysis.LinearDiscriminantAnalysis
) 和二次判别分析法( discriminant_analysis.QuadraticDiscriminantAnalysis
) 是两种经典的分类器。正如他们的名字所示,分别为线性的与二次决策面。
这两种方法很具有吸引力,因为他们拥有容易计算,并且本质是多类的闭合解,提供了在无超参数情况下的良好性能。
这个绘图展示了线性与二次判别分析法各自的决策边界。第二行展示了线性判别分析法只能得出一个线性的边界,而二次判别分析法能够得到一个更灵活的二次边界。
discriminant_analysis.LinearDiscriminantAnalysis
能够同来执行监督降维,通过把输入数据到投影由最大化类间隔(空间)的方向的线性子空间(在下面的数学部分会讨论其确切含义)。让输出的维数个数比类的个数少是必要的,所以这通常是一个相当巨大的维数降维,并且只在多类中才有效。
discriminant_analysis.LinearDiscriminantAnalysis.transform
的实现使得可以通过设置构造器参数** n_components **来设置所需的维度。但是这个参数丝毫不会影响 discriminant_analysis.LinearDiscriminantAnalysis.fit
或 discriminant_analysis.LinearDiscriminantAnalysis.predict
。
LDA(线性判别分析法)和QDA(二次判别分析法)能够使用一个简单的概率模型来分别派生出。这个模型是关于每一类** k 中关于数据概率 P(X|y = k) 的条件分布。然后可以通过使用贝叶斯来获得预测结果:
为了了解LDA在降维中的是如何应用的,根据上面解释的LDA分类规则开始几何重构是有必要的。我们定义** K 作为目标类的总数。自从在LDA里,我们定义所有的类拥有相同的被估计出的协方差 Σ **,我们可以重缩放输入数据以使得将其定义为如下:
然后可以表明在缩放之后对数据点进行分类等效于获得估计类平均值** μk^* ,其在欧氏距离上最靠近数据点。但是这一点可以通过投影到由所有类的均值 μk^* 生成的仿射 K - 1 子空间之后完成。这表明其是内置在LDA分类器中,通过线性投影在 K - 1 维度空间上的降维操作。
我们可以进一步的降低更多的维度,为了选出 L ,可以通过投影在线性子空间 HL ,其使得投影后, μk^* 的方差最大化(实际上,我们正在为被转换的类均值 μk^* 提供一种PCA的形式)。在 discriminant_analysis.LinearDiscriminantAnalysis.transform
函数, L 在这函数中代表的是 n_components **参数。可以查看 [3] 来获得更多的细节。
收缩是一个用于提高估量协方差矩阵的工具,其中训练集的数据是比特征的数量要小。在这种情况下,经验样本协方差是一种不好的估计。收缩LDA可以通过在 discriminant_analysis.LinearDiscriminantAnalysis
类中设置** shrinkage 参数为 auto 。这样会在通过引入Ledoit and Wolf [4] 的论点后,以分析的方式自动选出合适的收缩参数。但要注意的是,当前的收缩只适合在 solver 参数设置为 'lsqr' ** 或 ** 'eigen' **时有效。
**shrinkage **参数同样也可以手动设置为[0, 1]之间的值。尤其是值设置为0时代表着不收缩(其意味着会使用经验样本协方差矩阵)。和值设置为1时对应着完全收缩(其意味着方差的对角矩阵会被用来作为协方差矩阵的估计)。设置其之间值(即(0, 1))将会估计出对应的协方差矩阵的收缩。
默认的求解器是** 'svd' 。它可以执行分类和变换,并且不依赖协方差矩阵的计算。这一特性在应对大量特征数量时是一个优点,但 'svd' **求解器却无法进行收缩。
**'lsqr' **求解器是一个对于分类问题是十分有效的算法(只能处理分类问题),并且其支持收缩。
**'eigen' 求解器是基于类散射与类散射比之间的最优值。他可以处理分类和变换问题,同时也支持收缩。但是, 'eigen' **求解器需要计算器协方差矩阵,所以它在处理大量特征的情况下可能不是一个好选择。
(在尝试翻译这篇文档的时候难免会因为各种问题而出现错翻,如果发现的话,烦请指出,谢谢 )
线性和二次判别分析
:协方差矩阵,特征之间相互独立,其实就是一个对角矩阵。
线性判别分析(LDA)和二次判别分析(QDA)是两个经典的分类器。它们分别代表了线性决策平面和二次决策平面。这些分类器很容易计算得到解析解(指通过严格的公式所求得的解),其天生具有多分类的特性,且在实践中无需调参。线性判别分析与二次判别分析不同之处在于二次判别分析可以学习二次边界,模型更加灵活。如图:
线性判别分析通过把输入的数据投影到由最大化类之间分离的方向所组成的线性子空间,可以执行有监督降维,输出的维度必然会比原来的类别更少,多分类环境下,它是一个十分强大的降维算法。
LDA与QDA都源于简单的概率模型,这些模型对于每一个类别k的相关分布P(X|y=k)都可以通过贝叶斯定理获得:
我们最大化条件概率的类别k,更具体的说,P(X|y=k)被建模成多变量高斯分布:
其中n代表特征个数,我们需要从训练数据中估计出类的先验概率P(y=k),类别均值 ,以及协方差矩阵。在LDA中,每个类别k的高斯分布共享协方差矩阵,通过比较两个类别的对数概率,可以看出两个类别之间的线性决策面,即 。在QDA中,没有关于高斯协方差矩阵的假设,因此有了二次决策平面。
收缩是一种训练样本数量相比于特征而言很小的情况下可以提升预测准确性的工具。
默认的求解器为'svd'(奇异值分解),不依赖于协方差矩阵的计算,在特征数量特别大时很有优势,但是,它无法与收缩同时使用。还有求解器‘lsqr'(最小二乘),它是一个高效的算法,支持收缩,但是仅用于分类。最后一个求解器'eigen'(特征分解),基于类间散度和类内离散率之间的优化,支持收缩,可以用于分类,但是它需要计算协方差矩阵,因此其不适用于大量特征的情况。
我们用鸢尾花数据集做个示例,原数据特征为4维,降维后只剩两维,方便可视化。
这就是LDA降维后的效果,可以看到LDA将该数据集降成了可以明显区分的两个部分。
我们再看看不降维与降维的效果:
可以看出来,几乎无差别。至于LDA降维公式的推导,博主推过曾经手写推过一次,推完之后感觉没有什么实际意义,重要的是我们知道LDA用于有监督线性降维就OK了。以后在做数据建模的时候能有这方面的意识就行。至于QDA,因为它无法用于降维可视化,所以不多讲述,该算法主要运用在非线性关系上建模,比如异或问题,它就是一种非线性关系。
参考:《Scikit-Learn官方API》
如有疑问,请留言;如有错误,请指正
求一完整的SVM分类器的程序,matlab编写的。感激不尽。。。。
这个是非线性svm的:
1.命令函数部分:
clear;%清屏
clc;
X =load('data.txt');
n = length(X);%总样本数量
y = X(:,4);%类别标志
X = X(:,1:3);
TOL = 0.0001;%精度要求
C = 1;%参数,对损失函数的权重
b = 0;%初始设置截距b
Wold = 0;%未更新a时的W(a)
Wnew = 0;%更新a后的W(a)
for i = 1 : 50%设置类别标志为1或者-1
y(i) = -1;
end
a = zeros(n,1);%参数a
for i = 1 : n%随机初始化a,a属于[0,C]
a(i) = 0.2;
end
%为简化计算,减少重复计算进行的计算
K = ones(n,n);
for i = 1 :n%求出K矩阵,便于之后的计算
for j = 1 : n
K(i,j) = k(X(i,:),X(j,:));
end
end
sum = zeros(n,1);%中间变量,便于之后的计算,sum(k)=sigma a(i)*y(i)*K(k,i);
for k = 1 : n
for i = 1 : n
sum(k) = sum(k) + a(i) * y(i) * K(i,k);
end
end
while 1%迭代过程
%启发式选点
n1 = 1;%初始化,n1,n2代表选择的2个点
n2 = 2;
%n1按照第一个违反KKT条件的点选择
while n1 = n
if y(n1) * (sum(n1) + b) == 1 a(n1) = C a(n1) = 0
break;
end
if y(n1) * (sum(n1) + b) 1 a(n1) ~= 0
break;
end
if y(n1) * (sum(n1) + b) 1 a(n1) ~=C
break;
end
n1 = n1 + 1;
end
%n2按照最大化|E1-E2|的原则选取
E1 = 0;
E2 = 0;
maxDiff = 0;%假设的最大误差
E1 = sum(n1) + b - y(n1);%n1的误差
for i = 1 : n
tempSum = sum(i) + b - y(i);
if abs(E1 - tempSum) maxDiff
maxDiff = abs(E1 - tempSum);
n2 = i;
E2 = tempSum;
end
end
%以下进行更新
a1old = a(n1);
a2old = a(n2);
KK = K(n1,n1) + K(n2,n2) - 2*K(n1,n2);
a2new = a2old + y(n2) *(E1 - E2) / KK;%计算新的a2
%a2必须满足约束条件
S = y(n1) * y(n2);
if S == -1
U = max(0,a2old - a1old);
V = min(C,C - a1old + a2old);
else
U = max(0,a1old + a2old - C);
V = min(C,a1old + a2old);
end
if a2new V
a2new = V;
end
if a2new U
a2new = U;
end
a1new = a1old + S * (a2old - a2new);%计算新的a1
a(n1) = a1new;%更新a
a(n2) = a2new;
%更新部分值
sum = zeros(n,1);
for k = 1 : n
for i = 1 : n
sum(k) = sum(k) + a(i) * y(i) * K(i,k);
end
end
Wold = Wnew;
Wnew = 0;%更新a后的W(a)
tempSum = 0;%临时变量
for i = 1 : n
for j = 1 : n
tempSum= tempSum + y(i )*y(j)*a(i)*a(j)*K(i,j);
end
Wnew= Wnew+ a(i);
end
Wnew= Wnew - 0.5 * tempSum;
%以下更新b:通过找到某一个支持向量来计算
support = 1;%支持向量坐标初始化
while abs(a(support)) 1e-4 support = n
support = support + 1;
end
b = 1 / y(support) - sum(support);
%判断停止条件
if abs(Wnew/ Wold - 1 ) = TOL
break;
end
end
%输出结果:包括原分类,辨别函数计算结果,svm分类结果
for i = 1 : n
fprintf('第%d点:原标号 ',i);
if i = 50
fprintf('-1');
else
fprintf(' 1');
end
fprintf(' 判别函数值%f 分类结果',sum(i) + b);
if abs(sum(i) + b - 1) 0.5
fprintf('1\n');
else if abs(sum(i) + b + 1) 0.5
fprintf('-1\n');
else
fprintf('归类错误\n');
end
end
end
2.名为f的功能函数部分:
function y = k(x1,x2)
y = exp(-0.5*norm(x1 - x2).^2);
end
3.数据:
0.8871 -0.3491 8.3376 0
1.2519 1.2083 6.5041 0
-1.1925 1.9338 1.8790 0
-0.1277 2.4371 2.6971 0
1.9697 3.0906 6.0391 0
0.7603 0.8241 1.5323 0
1.6382 3.5516 4.4694 0
1.3438 -0.4539 5.9366 0
-1.3361 -2.0201 1.6393 0
-0.3886 3.3041 8.0450 0
-0.6780 6.0196 -0.4084 0
0.3552 -0.1051 1.2458 0
1.6560 4.0786 0.8521 0
0.8117 3.5451 6.8925 0
1.4773 -1.9340 3.9256 0
-0.0732 -0.9526 0.4609 0
0.1521 4.3711 2.2600 0
1.4820 0.7493 0.3475 0
0.6140 4.5261 8.3776 0
0.5721 3.3460 3.7853 0
0.5269 4.1452 4.3900 0
1.7879 -0.5390 2.5516 0
0.9885 5.7625 0.1832 0
-0.3318 2.4373 -0.6884 0
1.3578 5.4709 3.4302 0
2.7210 -1.1268 4.7719 0
0.5039 -0.1025 2.3650 0
1.1107 1.6885 3.7650 0
0.7862 1.3587 7.3203 0
1.0444 -1.5841 3.6349 0
1.7795 1.7276 4.9847 0
0.6710 1.4724 -0.5504 0
0.2303 0.2720 -1.6028 0
1.7089 -1.7399 4.8882 0
1.0059 0.5557 5.1188 0
2.3050 0.8545 2.8294 0
1.9555 0.9898 0.3501 0
1.7141 1.5413 3.8739 0
2.2749 5.3280 4.9604 0
1.6171 0.5270 3.3826 0
3.6681 -1.8409 4.8934 0
1.1964 1.8781 1.4146 0
0.7788 2.1048 0.0380 0
0.7916 5.0906 3.8513 0
1.0807 1.8849 5.9766 0
0.6340 2.6030 3.6940 0
1.9069 -0.0609 7.4208 0
1.6599 4.9409 8.1108 0
1.3763 0.8899 3.9069 0
0.8485 1.4688 6.7393 0
3.6792 6.1092 4.9051 1
4.3812 7.2148 6.1211 1
4.3971 3.4139 7.7974 1
5.0716 7.7253 10.5373 1
5.3078 8.8138 6.1682 1
4.1448 5.5156 2.8731 1
5.3609 6.0458 4.0815 1
4.7452 6.6352 1.3689 1
6.0274 6.5397 -1.9120 1
5.3174 3.0134 6.7935 1
7.2459 3.6970 3.1246 1
6.1007 8.1087 5.5568 1
5.9924 6.9238 5.7938 1
6.0263 5.3333 7.5185 1
3.6470 8.0915 6.4713 1
3.6543 7.2264 7.5783 1
5.0114 6.5335 3.5229 1
4.4348 7.4379 -0.0292 1
3.6087 3.7351 3.0172 1
3.5374 5.5354 7.6578 1
6.0048 2.0691 10.4513 1
3.1423 4.0003 5.4994 1
3.4012 7.1536 8.3510 1
5.5471 5.1372 -1.5090 1
6.5089 5.4911 8.0468 1
5.4583 6.7674 5.9353 1
4.1727 2.9798 3.6027 1
5.1672 8.4136 4.8621 1
4.8808 3.5514 1.9953 1
5.4938 4.1998 3.2440 1
5.4542 5.8803 4.4269 1
4.8743 3.9641 8.1417 1
5.9762 6.7711 2.3816 1
6.6945 7.2858 1.8942 1
4.7301 5.7652 1.6608 1
4.7084 5.3623 3.2596 1
6.0408 3.3138 7.7876 1
4.6024 8.3517 0.2193 1
4.7054 6.6633 -0.3492 1
4.7139 5.6362 6.2330 1
4.0850 10.7118 3.3541 1
6.1088 6.1635 4.2292 1
4.9836 5.4042 6.7422 1
6.1387 6.1949 2.5614 1
6.0700 7.0373 3.3256 1
5.6881 5.1363 9.9254 1
7.2058 2.3570 4.7361 1
4.2972 7.3245 4.7928 1
4.7794 8.1235 3.1827 1
3.9282 6.4092 -0.6339 1
二次判别分类器源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、二次判别分类器源代码的信息别忘了在本站进行查找喔。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 06-02php小型网站源代码(php 网站源码)(2024-06-02)
- 06-02档案管理系统代码(档案分类及代码)(2024-06-02)
- 06-02asp图片源代码(asp图片上传源代码)(2024-06-02)
- 06-02投票网页html代码(网页投票系统源代码)(2024-06-02)
- 06-02查看php源代码(PHP查询功能完整代码实现)(2024-06-02)
- 06-02asp源代码产品展示(asp项目源码)(2024-06-02)
- 06-02蓝牙源代码(蓝牙app源码)(2024-06-02)
- 06-02关于java坦克大战源代码的信息(2024-06-02)
- 06-02系统设计源代码(c语言仓库管理系统设计源代码)(2024-06-02)
- 06-02brillo源代码的简单介绍(2024-06-02)
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
-
- 神马搜索引擎的缺点[不受国内限制的搜索引擎]
- java小程序源代码(开源的小程序源码)(2024-06-02)
- 防伪防窜货源代码(防伪防窜货系统)(2024-06-02)
- 广告代码网站底部浮动弹(浮漂广告代码)(2024-06-02)
- 协同办公平台代码(协同办公平台下载)(2024-06-02)
- 春节倒计时代码(新年倒计时代码)(2024-06-02)
- android连接wifi代码(android查看wifi密码)(2024-06-02)
- ie6无法查看ie版本看到源代码(怎么能看出来ie版本)(2024-06-02)
- 给我一个手机网站代码(网站代码 获取手机号)(2024-06-02)
- jquery幻灯片滑动效果代码(PPT滑动效果)(2024-06-02)
- 友情链接