{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "srand(1)\n", "m = 25;\n", "n = 10;\n", "A = randn(m, n);\n", "b = randn(m, 1);" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "using Convex, SCS\n", "set_default_solver(SCSSolver(verbose=0));\n", "gammas = logspace(-4, 2, 100);\n", "x_values = zeros(n, length(gammas));\n", "x = Variable(n);\n", "for i=1:length(gammas)\n", " cost = sum_squares(A*x - b) + gammas[i]*norm(x,1);\n", " problem = minimize(cost, [norm(x, Inf) <= 1]);\n", " solve!(problem);\n", " x_values[:,i] = evaluate(x);\n", "end" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", " \n", " λ\n", " \n", " \n", " 10-4\n", " 10-3\n", " 10-2\n", " 10-1\n", " 100\n", " 101\n", " 102\n", " \n", " \n", " \n", " x1\n", " x2\n", " x3\n", " x4\n", " x5\n", " x6\n", " x7\n", " x8\n", " x9\n", " x10\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " label\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -1.0\n", " -0.5\n", " 0.0\n", " 0.5\n", " \n", " \n", " x\n", " \n", " \n", " Entries of x vs λ\n", " \n", "\n", "\n", "\n", " \n", "\n", "\n" ], "text/html": [ "\n", "\n", "\n", " \n", " λ\n", " \n", " \n", " 10-11\n", " 10-10\n", " 10-9\n", " 10-8\n", " 10-7\n", " 10-6\n", " 10-5\n", " 10-4\n", " 10-3\n", " 10-2\n", " 10-1\n", " 100\n", " 101\n", " 102\n", " 103\n", " 104\n", " 105\n", " 106\n", " 107\n", " 108\n", " 109\n", " 10-10.0\n", " 10-9.8\n", " 10-9.6\n", " 10-9.4\n", " 10-9.2\n", " 10-9.0\n", " 10-8.8\n", " 10-8.6\n", " 10-8.4\n", " 10-8.2\n", " 10-8.0\n", " 10-7.8\n", " 10-7.6\n", " 10-7.4\n", " 10-7.2\n", " 10-7.0\n", " 10-6.8\n", " 10-6.6\n", " 10-6.4\n", " 10-6.2\n", " 10-6.0\n", " 10-5.8\n", " 10-5.6\n", " 10-5.4\n", " 10-5.2\n", " 10-5.0\n", " 10-4.8\n", " 10-4.6\n", " 10-4.4\n", " 10-4.2\n", " 10-4.0\n", " 10-3.8\n", " 10-3.6\n", " 10-3.4\n", " 10-3.2\n", " 10-3.0\n", " 10-2.8\n", " 10-2.6\n", " 10-2.4\n", " 10-2.2\n", " 10-2.0\n", " 10-1.8\n", " 10-1.6\n", " 10-1.4\n", " 10-1.2\n", " 10-1.0\n", " 10-0.8\n", " 10-0.6\n", " 10-0.4\n", " 10-0.2\n", " 100.0\n", " 100.2\n", " 100.4\n", " 100.6\n", " 100.8\n", " 101.0\n", " 101.2\n", " 101.4\n", " 101.6\n", " 101.8\n", " 102.0\n", " 102.2\n", " 102.4\n", " 102.6\n", " 102.8\n", " 103.0\n", " 103.2\n", " 103.4\n", " 103.6\n", " 103.8\n", " 104.0\n", " 104.2\n", " 104.4\n", " 104.6\n", " 104.8\n", " 105.0\n", " 105.2\n", " 105.4\n", " 105.6\n", " 105.8\n", " 106.0\n", " 106.2\n", " 106.4\n", " 106.6\n", " 106.8\n", " 107.0\n", " 107.2\n", " 107.4\n", " 107.6\n", " 107.8\n", " 108.0\n", " 10-10\n", " 10-5\n", " 100\n", " 105\n", " 1010\n", " 10-10.0\n", " 10-9.5\n", " 10-9.0\n", " 10-8.5\n", " 10-8.0\n", " 10-7.5\n", " 10-7.0\n", " 10-6.5\n", " 10-6.0\n", " 10-5.5\n", " 10-5.0\n", " 10-4.5\n", " 10-4.0\n", " 10-3.5\n", " 10-3.0\n", " 10-2.5\n", " 10-2.0\n", " 10-1.5\n", " 10-1.0\n", " 10-0.5\n", " 100.0\n", " 100.5\n", " 101.0\n", " 101.5\n", " 102.0\n", " 102.5\n", " 103.0\n", " 103.5\n", " 104.0\n", " 104.5\n", " 105.0\n", " 105.5\n", " 106.0\n", " 106.5\n", " 107.0\n", " 107.5\n", " 108.0\n", " \n", " \n", " \n", " x1\n", " x2\n", " x3\n", " x4\n", " x5\n", " x6\n", " x7\n", " x8\n", " x9\n", " x10\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " label\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " -3.0\n", " -2.5\n", " -2.0\n", " -1.5\n", " -1.0\n", " -0.5\n", " 0.0\n", " 0.5\n", " 1.0\n", " 1.5\n", " 2.0\n", " 2.5\n", " -2.50\n", " -2.45\n", " -2.40\n", " -2.35\n", " -2.30\n", " -2.25\n", " -2.20\n", " -2.15\n", " -2.10\n", " -2.05\n", " -2.00\n", " -1.95\n", " -1.90\n", " -1.85\n", " -1.80\n", " -1.75\n", " -1.70\n", " -1.65\n", " -1.60\n", " -1.55\n", " -1.50\n", " -1.45\n", " -1.40\n", " -1.35\n", " -1.30\n", " -1.25\n", " -1.20\n", " -1.15\n", " -1.10\n", " -1.05\n", " -1.00\n", " -0.95\n", " -0.90\n", " -0.85\n", " -0.80\n", " -0.75\n", " -0.70\n", " -0.65\n", " -0.60\n", " -0.55\n", " -0.50\n", " -0.45\n", " -0.40\n", " -0.35\n", " -0.30\n", " -0.25\n", " -0.20\n", " -0.15\n", " -0.10\n", " -0.05\n", " 0.00\n", " 0.05\n", " 0.10\n", " 0.15\n", " 0.20\n", " 0.25\n", " 0.30\n", " 0.35\n", " 0.40\n", " 0.45\n", " 0.50\n", " 0.55\n", " 0.60\n", " 0.65\n", " 0.70\n", " 0.75\n", " 0.80\n", " 0.85\n", " 0.90\n", " 0.95\n", " 1.00\n", " 1.05\n", " 1.10\n", " 1.15\n", " 1.20\n", " 1.25\n", " 1.30\n", " 1.35\n", " 1.40\n", " 1.45\n", " 1.50\n", " 1.55\n", " 1.60\n", " 1.65\n", " 1.70\n", " 1.75\n", " 1.80\n", " 1.85\n", " 1.90\n", " 1.95\n", " 2.00\n", " -4\n", " -2\n", " 0\n", " 2\n", " -2.5\n", " -2.4\n", " -2.3\n", " -2.2\n", " -2.1\n", " -2.0\n", " -1.9\n", " -1.8\n", " -1.7\n", " -1.6\n", " -1.5\n", " -1.4\n", " -1.3\n", " -1.2\n", " -1.1\n", " -1.0\n", " -0.9\n", " -0.8\n", " -0.7\n", " -0.6\n", " -0.5\n", " -0.4\n", " -0.3\n", " -0.2\n", " -0.1\n", " 0.0\n", " 0.1\n", " 0.2\n", " 0.3\n", " 0.4\n", " 0.5\n", " 0.6\n", " 0.7\n", " 0.8\n", " 0.9\n", " 1.0\n", " 1.1\n", " 1.2\n", " 1.3\n", " 1.4\n", " 1.5\n", " 1.6\n", " 1.7\n", " 1.8\n", " 1.9\n", " 2.0\n", " \n", " \n", " x\n", " \n", " \n", " Entries of x vs λ\n", " \n", "\n", "\n", "\n", " \n", "\n", "\n", "\n", "\n" ], "text/plain": [ "Plot(...)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Plot the regularization path.\n", "using Gadfly, DataFrames\n", "df = DataFrame(λ=gammas, x=vec(x_values[1,:]), label=\"x1\")\n", "for i=2:n\n", " df = vcat(df, DataFrame(λ=gammas, x=vec(x_values[i,:]), label=string(\"x\", i)));\n", "end\n", "plot(df, x=\"λ\", y=\"x\", color=\"label\", Geom.line, Scale.x_log10, Guide.title(\"Entries of x vs λ\"))" ] } ], "metadata": { "kernelspec": { "display_name": "Julia 0.3.9", "language": "julia", "name": "julia-0.3" }, "language_info": { "name": "julia", "version": "0.3.9" } }, "nbformat": 4, "nbformat_minor": 0 }