diff --git a/Chapter_09.ipynb b/Chapter_09.ipynb
index a5db378..d9ceed6 100644
--- a/Chapter_09.ipynb
+++ b/Chapter_09.ipynb
@@ -36,111 +36,111 @@
"\n",
"\n"
+ "\n"
]
},
"execution_count": 2,
@@ -166,115 +166,107 @@
"\n",
"\n"
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n"
]
},
"execution_count": 3,
@@ -288,7 +280,7 @@
"x[labels .== -1, :] = x[labels .== -1, :] .+ 1\n",
"\n",
"scatter(x[labels .== 1, 1], x[labels .== 1, 2])\n",
- "scatter!(x[labels .== -1, 1], x[labels .== -1, 2], xlabel=\"X1\", ylabel=\"X2\")"
+ "scatter!(x[labels .== -1, 1], x[labels .== -1, 2], xlabel=\"X1\", ylabel=\"X2\", legend=false)"
]
},
{
@@ -320,16 +312,30 @@
" f(i, j) = begin \n",
" c = reshape([i; j], (2, 1))\n",
" pred = svmpredict(model, c) \n",
- " if pred[2][1] < 0\n",
- " return -1\n",
- " end\n",
- " return 1\n",
+ "# if pred[2][1] < 0\n",
+ "# return -1\n",
+ "# end\n",
+ "# return 1\n",
+ " return pred[2][1]\n",
" end\n",
" \n",
- " contour(xx, yy, f, fill = true)\n",
+ "# contour(xx, yy, f, fill = true)\n",
+ " contour(xx, yy, f, fill = true, colorbar_entry=false, levels=1)\n",
+ " # use colorbar_entry = false to hide the side color bar\n",
+ " # levels = 1 means there are only 2 colors for contour plot\n",
+ " # see more options in src/arg_desc.jl of https://github.com/JuliaPlots/Plots.jl/\n",
"end"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "model = svmtrain(x', labels, kernel=Kernel.Linear);"
+ ]
+ },
{
"cell_type": "code",
"execution_count": 6,
@@ -337,8 +343,493 @@
"outputs": [
{
"data": {
- "text/plain": [
- "LIBSVM.SVM{Int64}(SVC, LIBSVM.Kernel.Linear, nothing, 2, 2, [-1, 1], Int32[1, 2], Float64[], Int32[], LIBSVM.SupportVectors{Int64,Float64}(10, Int32[5, 5], [-1, -1, -1, -1, -1, 1, 1, 1, 1, 1], [0.5619454406636804 0.3488368485140593 … 1.7610768109132122 -0.5390546959903736; 1.1190717682609719 0.8905676031637255 … -1.462309817246052 0.8446998890680568], Int32[1, 7, 11, 17, 19, 2, 4, 8, 10, 18], LIBSVM.SVMNode[LIBSVM.SVMNode(1, 0.5619454406636804), LIBSVM.SVMNode(1, 0.3488368485140593), LIBSVM.SVMNode(1, 1.865832273149916), LIBSVM.SVMNode(1, 1.2465220798764312), LIBSVM.SVMNode(1, 1.3377949807092382), LIBSVM.SVMNode(1, 0.5722367811060431), LIBSVM.SVMNode(1, 1.8970253945708542), LIBSVM.SVMNode(1, 0.1767107607950541), LIBSVM.SVMNode(1, 1.7610768109132122), LIBSVM.SVMNode(1, -0.5390546959903736)]), 0.0, [1.0; 1.0; … ; -0.343325137976408; -0.6885740126979735], Float64[], Float64[], [1.3863834535224921], 3, 0.5, 200.0, 0.001, 1.0, 0.5, 0.1, true, false)"
+ "image/svg+xml": [
+ "\n",
+ "\n"
]
},
"execution_count": 6,
@@ -347,7 +838,9 @@
}
],
"source": [
- "model = svmtrain(x', labels, kernel=Kernel.Linear)"
+ "plot_svc(model, x, labels)\n",
+ "scatter!(x[labels .== 1, 1], x[labels .== 1, 2])\n",
+ "scatter!(x[labels .== -1, 1], x[labels .== -1, 2], xlabel=\"X1\", ylabel=\"X2\", legend=false)"
]
},
{
@@ -361,3357 +854,495 @@
"\n",
"\n"
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n"
]
},
"execution_count": 7,
@@ -3719,3179 +1350,32 @@
"output_type": "execute_result"
}
],
- "source": [
- "plot_svc(model, x, labels)\n",
- "scatter!(x[labels .== 1, 1], x[labels .== 1, 2])\n",
- "scatter!(x[labels .== -1, 1], x[labels .== -1, 2], xlabel=\"X1\", ylabel=\"X2\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
"source": [
"model = svmtrain(x', labels, kernel=Kernel.Linear, cost=0.1)\n",
"\n",
"plot_svc(model, x, labels)\n",
"scatter!(x[labels .== 1, 1], x[labels .== 1, 2])\n",
- "scatter!(x[labels .== -1, 1], x[labels .== -1, 2], xlabel=\"X1\", ylabel=\"X2\")"
+ "scatter!(x[labels .== -1, 1], x[labels .== -1, 2], xlabel=\"X1\", ylabel=\"X2\", legend=false)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "x = randn(20, 2);\n",
+ "labels = repeat([-1, 1], 10);\n",
+ "x[labels .== -1, :] = x[labels .== -1, :] .+ 5;"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "10×2 Array{Float64,2}:\n",
- " 4.62623 5.83517\n",
- " 5.11895 5.1316\n",
- " 4.11709 6.64651\n",
- " 2.16258 5.77153\n",
- " 3.60996 5.26811\n",
- " 5.72187 4.4572\n",
- " 6.37056 4.45886\n",
- " 5.35572 3.79251\n",
- " 3.38903 8.14114\n",
- " 4.38173 5.60279"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
- "x = randn(20, 2)\n",
- "labels = repeat([-1, 1], 10)\n",
- "x[labels .== -1, :] = x[labels .== -1, :] .+ 5"
+ "model = svmtrain(x', labels, kernel=Kernel.Linear);"
]
},
{
@@ -6901,8 +1385,737 @@
"outputs": [
{
"data": {
- "text/plain": [
- "LIBSVM.SVM{Int64}(SVC, LIBSVM.Kernel.Linear, nothing, 2, 2, [-1, 1], Int32[1, 2], Float64[], Int32[], LIBSVM.SupportVectors{Int64,Float64}(2, Int32[1, 1], [-1, 1], [2.1625823939843034 -0.7291356975526773; 5.771533257558114 2.714922315434204], Int32[7, 2], LIBSVM.SVMNode[LIBSVM.SVMNode(1, 2.1625823939843034), LIBSVM.SVMNode(1, -0.7291356975526773)]), 0.0, [0.11296305277853795; -0.11296305277853795], Float64[], Float64[], [1.6992419834574224], 3, 0.5, 200.0, 0.001, 1.0, 0.5, 0.1, true, false)"
+ "image/svg+xml": [
+ "\n",
+ "\n"
]
},
"execution_count": 10,
@@ -6911,6617 +2124,9 @@
}
],
"source": [
- "model = svmtrain(x', labels, kernel=Kernel.Linear)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/svg+xml": [
- "\n",
- "\n"
- ]
- },
- "execution_count": 11,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "plot_svc(model, x, labels)\n",
- "scatter!(x[labels .== 1, 1], x[labels .== 1, 2])\n",
- "scatter!(x[labels .== -1, 1], x[labels .== -1, 2], xlabel=\"X1\", ylabel=\"X2\")"
+ "plot_svc(model, x, labels);\n",
+ "scatter!(x[labels .== 1, 1], x[labels .== 1, 2]);\n",
+ "scatter!(x[labels .== -1, 1], x[labels .== -1, 2], xlabel=\"X1\", ylabel=\"X2\", legend=false)"
]
},
{
@@ -13531,6 +2136,19 @@
"## SVM with non-linear kernel"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "X = randn(2, 200);\n",
+ "X[:, 1:100] = X[:, 1:100] .+ 2;\n",
+ "X[:, 101:150] = X[:, 101:150] .- 2;\n",
+ "\n",
+ "labels = vcat(repeat([-1], 150), repeat([1], 50));"
+ ]
+ },
{
"cell_type": "code",
"execution_count": 12,
@@ -13538,34 +2156,297 @@
"outputs": [
{
"data": {
- "text/plain": [
- "200-element Array{Int64,1}:\n",
- " -1\n",
- " -1\n",
- " -1\n",
- " -1\n",
- " -1\n",
- " -1\n",
- " -1\n",
- " -1\n",
- " -1\n",
- " -1\n",
- " -1\n",
- " -1\n",
- " -1\n",
- " â‹®\n",
- " 1\n",
- " 1\n",
- " 1\n",
- " 1\n",
- " 1\n",
- " 1\n",
- " 1\n",
- " 1\n",
- " 1\n",
- " 1\n",
- " 1\n",
- " 1"
+ "image/svg+xml": [
+ "\n",
+ "\n"
]
},
"execution_count": 12,
@@ -13574,11 +2455,8 @@
}
],
"source": [
- "X = randn(2, 200)\n",
- "X[:, 1:100] = X[:, 1:100] .+ 2\n",
- "X[:, 101:150] = X[:, 101:150] .- 2\n",
- "\n",
- "labels = vcat(repeat([-1], 150), repeat([1], 50))"
+ "scatter(X[1, labels .== 1], X[2, labels .== 1])\n",
+ "scatter!(X[1, labels .== -1], X[2, labels .== -1], legend=false)"
]
},
{
@@ -13592,292 +2470,1311 @@
"\n",
"