Machine Learning
with
RUBY
META
What's Next?
- (Very) Brief look at ML
- Deeper look at Classification & SVM
- How to use all this with Ruby
Live Demo!
... coz those always go well.
Demo: THe data
-
Fom MNIST's set of handwritten digits
- 60,000 images for training, 10,000 for testing
- Each is 28x28 pixels, raw grayscale intensity
- Pre-process: create CSV
0,0,0,0,0,0... 113,125,125,164,254,254,224,99... 0,0,0,0,0,0,three
Demo: Results
Demo: Try your OWN!
First, pre-process the uploaded file
i = Magick::Image.read(filename).first
out_filename = File.join(cropped_dir, File.split(filename).last)
i.quantize(2, Magick::GRAYColorspace) \
.contrast(sharpen=true) \
.negate(grayscale=true) \
.enhance \
.adaptive_blur(radius=0.0, sigma=1.0) \
.despeckle \
.resize_to_fill(28, 28) \
.write(out_filename)
What is ML?
"Field of study that gives computers the ability to learn without being explicitly programmed."
- Arthur Samuel
So... What is ML?
using statistics-driven algorithms
to find patterns in data.
- Arnab Deka
Supervised Learning
-
labelled data
-
predict labels on new data
- examples
- housing-price
- spam-filter
- algorithms/techniques
- decision trees
- bayes networks
- SVM & neural networks
Unsupervised Learning
-
unlabelled data
-
cluster data-points
- examples:
- organizing computer clusters
- social-network analysis
- finding market segments
- recommendations
- algorithms/techniques:
- K-Means
- hierarchical & density-based
Classification:
LINEAR REGRESSION
Classification:
LINEAR REGRESSION
CLASSIFICATION:
LINEAR REGRESSION
- Hypothesis: hθ(x)
- hθ(xi) = θ0 + θ1xi
Σ(hθ(xi) - yi)^2
Classification:
Logistic Regression
Classification:
LOGISTIC REGRESSION
CLASSIFICATION:
LOGISTIC REGRESSION
Similar to linear regression:
- need to minimize squared error
- y can only be 0 (not-spam) or 1 (spam)
- So, constrain hθ(x) between 0 and 1
- and round-off
CLASSIFICATION:
LOGISTIC REGRESSION
- So... hθ(x) = g(x)
- where g(z) =
Classification:
SVM
-
Very powerful and widely-used
- Support Vector Machines
- "Large Margin Classifier"
Classification: SVM
CLASSIFICATION:
Multi-class
ML (SVM) wiTH RUBY
-
libsvm and rb-libsvm
- weka
- the Matrix class
- Apache Mahout
ML with Ruby: libsvm
problem = Libsvm::Problem.new parameter = Libsvm::SvmParameter.new features = examples.map do |ary|
Libsvm::Node.features(ary)
end problem.set_examples(labels, features) model = Libsvm::Model.train(problem, parameter)
model.predict(Libsvm::Node.features(*test_example)).to_i
ML with RUBY: WEKA
LIVE DEMO!
... since the other one went so well!
Demo: Weka
java -jar -Xmx8192m lib/weka.jar
demo: Weka
Using Weka with Ruby
- weka.classifiers.functions.LibSVM
- is Java::WekaClassifiersFunctions::LibSVM
- setOptions() is set_options
model = Java::WekaClassifiersFunctions::LibSVM.new
model.set_options(options) model.build_classifier(data) model.classify_instance(d)
And the rest...
What we didn't discuss at all:
- Regularization
- normalization
- polynomial classifiers
- cross-validation
- testing
- attribute-selection (PCA)
- data-generation
Go forth...
Still not inspired?
Dive deeper:
Machine Learning with Ruby
By Arnab Deka
Machine Learning with Ruby
- 6,984