自定义功能嵌入SVM

22日视图(30天)
Kamal Premaratne
Kamal Premaratne 2023年6月11日在3:36
回答: 格拉。约3小时前
我一直试图定义一个自定义功能嵌入以便支持向量机应用于特征空间。作为exampe,假设我有以下2个数据样本,各有一个x和y坐标:
D = [p1;p2),
p1 = ((x1, y1) =(1 2)和p2 = [x2 y2] = [3 - 4]。让我们以矢量数据样本的类
C = [1;1]。
嵌入的特性是
φ(p1) = [x1 ^ 2;√2)* x1 *日元;y1 ^ 2);
φ(p2) = (x2 ^ 2;√2)* x2 * y2;y2 ^ 2);
我试着
> > SVM1 = fitcsvm (D C KernelFunction = “CustomKernel” ,规范= true);
我定义的函数
函数 G = CustomKernel (U, V)
%
φ= [U (: 1) ^ 2;√2 * U (: 1)。* (:, 2);U (:, 2) ^ 2);
φ=重塑(φ,[],3);
G =φ*φ';
但当我运行SVM1
> > D = [1 2;3 4];C = [1;1);
它返回错误
> >内核函数返回内核不正确的大小的产品。
我将感谢任何帮助。谢谢。

答案(1)

格拉。
格拉。 25分钟前
卡迈勒 ,
我知道你想要 知道 为什么您的自定义支持向量机嵌入 返回错误。
这个错误 因为核函数 你已经 是返回一个内核产品矩阵定义错误的大小。
在你的 CustomKernel 函数, 定义功能嵌入 φ 为每个数据点,然后计算内核的产品矩阵 G =φ*φ' 计算每一对数据点之间的内积定义的特征空间功能嵌入。
但是,内核返回的产品矩阵的大小计算与支持向量机分类器不兼容,预计一个方阵,每个条目 G ( ,j) 代表 功能嵌入的数据点之间的内积 j
为了解决这个问题,你需要改变大小的内核的产品矩阵 G NxN ,在那里 N 是数据点的数量在你的输入矩阵 D
请参考以下代码片段的更好的理解。
函数G = CustomKernel (U, V)
%定义特性嵌入功能
嵌入= @ (p) [p (: 1)。^ 2,√(2)* p (: 1)。* p (:, 2), p (:, 2) ^ 2];
%计算每个数据点的功能嵌入
embeddings_U =嵌入(U);
embeddings_V =嵌入(V);
%计算每一对之间的内积功能嵌入
G = 0(大小(U, 1),大小(V, 1));
i = 1:尺寸(U, 1)
j = 1:尺寸(V, 1)
G点(i, j) = (embeddings_U(我,:),embeddings_V (j,:));
结束
结束
我希望这能帮助你解决 查询

类别

找到更多的在嵌入式编码器帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!