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