Instalando e usando Julia e Exercícios sobre Regressão Linear e Polinomial
Faça o download de Julia em:
http://julialang.org/downloads/
e instale em seu computador.
Instale o IPython notebook em seu computador:
http://ipython.org/notebook.html
Depois, digite julia na linha de comando, executando o binário para entrar no modo script interativo e digite dentro desse ambiente:
Pkg.add("IJulia")
Pkg.add("PyPlot")
Pkg.add("RDatasets")
Pkg.add("Gadfly")
Se encontrar o erro "ERROR: symlink: file already exists (EEXIST)" thrown using Pkg
resolva ele assim como explicado em: https://www.reddit.com/r/Julia/comments/3e9qlf/error_symlink_file_already_exists_eexist_thrown/
cd $HOME/.julia/v0.3/ rm .cache ln -s $HOME/.julia/.cache .cache
Em seguida, execute na linha de comando (terminal):
ipython notebook
Nesse ambiente, você poderá criar scripts em Julia (ou Python, Ruby) dentro de um navegador de maneira interativa, bem como visualizar gráficos no próprio navegador.
Crie um novo script Julia para experimentar com a linguagem.
Se desejar, poderá instalar também o ambiente de desenvolvimento para Julia: Juno
Veja um resumo da linguagem Julia aqui: http://learnxinyminutes.com/docs/julia/
Alungs slides sobre Julia: http://www.stat.wisc.edu/~bates/JuliaForRProgrammers.pdf
Outras fontes para aprender Julia: http://julialang.org/learning/
Exercícios
Antes de começar os exercícios, deverá executar esse código uma vez:
using Gadfly using Distributions
Para resolver os exercícios, você pode desejar ver os slides da Aula 1 (ver no Moodle, a ser inserido pelo prof. Marcelo).
OBS: Na próxima aula, traga seu laptop com Julia instalado.
Exercício 1 (Regressão Linear), para sexta-feira (28 de agosto):
Dado um conjunto de pontos ou exemplo de treinamento com erro Gaussiano em y, encontre a hipótese (reta) que maximiza o likelihood de observar os dados dado a hipótese, ou seja, aquela que aproxima os dados quando consideramos a função de custo como sendo o erro quadrático. Para isso, use o método do descenso do gradiente para atualizar os parâmetros theta da hipótese (reta). Por exemplo, poderá criar pelo menos 2 funções:
function gradient(examples, theta) function gradient_descent(examples, theta; learning_rate=0.05)
que retorna o valor do gradiente com relação à theta (um vetor); e que executa o laço de repetição da atualização dos parâmetros theta. A hipótese será:
function hypothesis(x, theta) y = [1 x]' * theta end
com theta inicial:
theta_ini = ones(2) * 0.001
Os exemplos de treinamento poderão ser gerados da seguinte maneira:
n = 10 x = 1:0.1:n d = Normal(0,8) y = 5.4x ysample = y + rand(d,length(x)) plot(x=x,y=ysample,Geom.point)
Para plotar os resultados, poderá usar essa função:
# Plota resultados function plot_results() h_ = zeros(length(x)) for i in 1:length(x) h_[i] = hypothesis(x[i], theta) end # hypothesis in red plot(layer(x=x, y=h_, Geom.point, Theme(default_color=color("red"))), layer(x=x, y=y, Geom.point), layer(x=x, y=ysample, Geom.point, Theme(default_color=color("black")))) end
Exercício 2 (Regressão Polinomial), para sexta-feira (28 de agosto)
Crie agora um conjunto de treinamento (x,y) que expresse uma relação não-linear entre x e y, e treine uma hipótese não-linear para aproximar os dados de treinamento. As funções gradient e gradient_descent ficarão basicamente iguais (se você criou uma função gradient genérica o suficiente; caso contrário, terá que modificá-la). Você deverá mudar a função hypothesis(x, theta) e verificar se a função gradient precisará ser mudada.
Exercício 3, para sexta-feira (28 de agosto)
Tente aproximar os dados do exercício 1 com uma hipótese não-linear, por ex., do exercício 2. O que acontece?
Exercício 4, opcional
## classes linearmente separaveis n = 40 sigma = 5 d1 = Normal(0,sigma) d2 = Normal(20,sigma) # classe 1 x1 = rand(d1,n) x2 = rand(d1,n) samples = [x1 x2 zeros(n)] # classe 2 x1 = rand(d2,n) x2 = rand(d2,n) samples = [x; x1 x2 ones(n)] plot(layer(x=samples[:,1],y=samples[:,2],Geom.point))
Uma seleção de outros pacotes ou extensões existentes para Julia:
Pkg.add("NaiveBayes") Pkg.add("BayesNets") Pkg.add("Boltzmann") Pkg.add("Clustering") Pkg.add("DecisionTree") # https://github.com/bensadeghi/DecisionTree.jl Pkg.add("Distributions") Pkg.add("Evolutionary") Pkg.add("FaceDatasets") Pkg.add("GaussianMixtures") Pkg.add("LIBSVM") Pkg.add("MachineLearning") Pkg.add("Lora") / Pkg.add("Mamba") / Pkg.add("MCMC") Pkg.add("MarketData") Pkg.add("MAT") # Matlab files reading Pkg.add("MNIST") # handwritten digits dataset Pkg.add("Mocha") # Deep learning
Pkg.add("Morsel") # web development