Optimization (some complementary remarks to lect. 4) By default, the

advertisement
Optimization (some complementary remarks to lect. 4)
By default, the robustfit algorithm uses iteratively reweighted least squares
with a bisquare weighting function.
n
Iteratively reweighted least-squares: minimizing
w e
2 2
i i
i 1
Least-squares assigns equal weight to each observation; the weights for the
Huber estimator decline when |e| > k; and the weights for the bisquare decline
as soon as e departs from 0, and are 0 for |e| > k. where k-tuning constant
General syntax:
b = robustfit(X,y,wfun,tune,const)
Default weight function is ‘bisquare’ i.e. w = (abs(r)<1) .* (1 - r.^2).^2
where r = resid/(tune*s*sqrt(1-h)), all parameters from previous iteration
Decreasing the tuning constant increases the downweight assigned to large
residuals; increasing the tuning constant decreases the downweight assigned to
large residuals Default value for tune parameter is 4.685 if ‘bisquare’ fn. used.
Robustfit example:
Generate data with the trend y = 10-2*x, then change one value to simulate an
outlier:
x = (1:10)';
y = 10 - 2*x + randn(10,1);
y(10) = 0; % outlier
Use both ordinary least squares and robust regression to estimate a straight-line
fit:
bls = regress(y,[ones(10,1) x])
brob = robustfit(x,y,'bisquare',4.685)
Using databases (MySQL)
1. Loading data from database
% Database Server
host = 'localhost';
user = 'root';
password = '';
dbName = 'raamatutellimus';
% JDBC Parameters
jdbcString = sprintf('jdbc:mysql://%s/%s', host, dbName);
jdbcDriver = 'com.mysql.jdbc.Driver';
% Set this to the path to your MySQL Connector/J JAR
javaaddpath('mysql-connector-java-5.1.10-bin.jar')
% Create the database connection object
dbConn = database(dbName, user , password, jdbcDriver, jdbcString);
% Check to make sure that we successfully connected
if isconnection(dbConn)
% building cursor object
% general syntax:
curs = exec(conn, sqlquery);
curs=exec(dbConn, 'SELECT * FROM raamatud');
% Import data into MATLAB workspace from cursor object created by exec
% general syntax :
curs = fetch(curs, RowLimit)
curs=fetch(curs)
% If the connection failed, print the error message
else
disp(sprintf('Connection failed: %s', dbConn.Message));
end
% Close the connection
close(dbConn);
% output results
data=curs.data
%Results are obtained as cell arrays
% In order to obtain numerical results use the following settings
setdbprefs('DataReturnFormat','numeric');
%back to cell arrays:
setdbprefs('DataReturnFormat','cellarray');
% In order to convert only some columns from cell array to numeric:
hind = curs.Data(:,4)
[hind{:}]
2. Inserting data to database
% Insert MATLAB data into database
% general syntax:
fastinsert(conn, 'tablename', colnames, exdata)
% Example
exdata = {'343434343' , 'Jutumees' , 'Jutt', 55.23};
colnames = {'isbn', 'autor' , 'pealkiri' , 'hind'};
fastinsert(dbConn, 'raamatud', colnames, exdata);
Exercise:
import exel data into Matlab, and store to database
% step1: database creation (using php)
<?php
$yhendus=mysql_connect("localhost","root","") or die("Ei saa andmebaasi lahti");
mysql_select_db("raamatutellimus",$yhendus);
$abi2="create table numbers
(
Id
integer unsigned auto_increment primary key,
a
float(10,3) not null,
b
float(10,3) not null,
c
float(10,3) not null,
d
float(10,3) not null,
e
float(10,3) not null
)";
mysql_query($abi2) or die(mysql_error());
?>
% step2: import exel data into MATLAB
exdata = xlsread('testmatlab.xls', 1, 'A5:E104')
% step3: store data from MATLAB to database (table numbers)
colnames = {'a', 'b','c','d','e'}
fastinsert(dbConn, 'numbers', colnames, exdata)
% step4: check results by loading data from database (from table numbers)
sqlcom='select * from numbers'
setdbprefs('DataReturnFormat','numeric')
3.
Updating data in database
% General syntax:
update(dbCconn, 'table', colnames, newdata, 'whereclause')
colnames = {'d'}
newdata(1,1) = {1500}
update(conn, 'numbers', colnames, newdata, 'where d >1500’)
% using string inside string in sql query:
'where First_Name = ''Tom'''
% multiple conditions and changes
update(dbConn, 'numbers', {'e'}, {100;1500},{'where e<100'; 'where e >1500'})
% update code example in mysql language
UPDATE people SET age = 7, date = "2006-06-02 16:21:00", height = 1.22
WHERE name = "Peggy"
% In Matlab direct sql command execution not available, syntax differs from direct
% SQL syntax.
Exercise:
a) Consider that the column ‘c’ is a price and calculate off 10% of the price
b) Add 10% of price conditionally (say for d>1000).
4.
Stored procedures
% General syntax:
results = runstoredprocedure(dbCconn, sp_name, parms_in, types_out)
% sample code for calling
x = runstoredprocedure(c,'myproc', {2500,'Jones'}, {java.sql.Types.NUMERIC})
% one simple sample of stored procedure (mysql)
CREATE PROCEDURE procedure1
(IN parameter1 INTEGER)
BEGIN
DECLARE variable1 CHAR(10);
IF parameter1 = 17 THEN
SET variable1 = 'birds';
ELSE
SET variable1 = 'beasts';
END IF;
INSERT INTO table1 VALUES (variable1);
END
Download