public void start(Analysis parent, HttpResponse response, System.Web.SessionState.HttpSessionState session) { ParameterStream stream = ParameterStream.getStream(session); String[] features = (String[])stream.get("selectedFeatures"); int PCs = (int)stream.get("numberOfPCs"); Registry.Registry registry = Registry.Registry.getRegistry(session); System.Data.DataSet ds = (System.Data.DataSet)registry.GetDataset((string)stream.get("dataSetName")); //retrieve dataset table (assume one for now) System.Data.DataTable dt = ds.Tables[0]; //raw data double[,] rawData = new double[dt.Rows.Count, features.Count()]; for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < features.Count(); j++) { rawData[i, j] = (double)dt.Rows[i].ItemArray.ElementAt(dt.Columns[features[j]].Ordinal); } } //Create matrix to hold data for PCA Matrix X = new Matrix(rawData); //Remove mean Vector columnVector; for (int i = 0; i < X.ColumnCount; i++) { columnVector = X.GetColumnVector(i); X.SetColumnVector(columnVector.Subtract(columnVector.Average()), i); } Matrix PCmatrix = new Matrix(X.ColumnCount, PCs, 0); Vector Weights = new Vector(PCs); System.Diagnostics.Stopwatch watch = new Stopwatch(); //Run algorithm and time it watch.Start(); SingularValueDecomposition svd = SVD(X); watch.Stop(); stream.set("algRunTime", watch.ElapsedMilliseconds); /* * response.Buffer = true; * response.Write(PCmatrix.ToString() + "\n"); * response.Write(Weights.ToString() + "\n"); * response.Flush(); */ Debug.WriteLine("Done with PCA"); stream.set("PCmatrix", svd.RightSingularVectors); stream.set("Weights", svd.SingularValues); parent.next(response, session); }
public Stream GetStream() { if (_parameterStream == null) { _parameterStream = new ParameterStream(this); } _parameterStream.Init(); return(_parameterStream); }
protected void FeatureList_Init(object sender, EventArgs e) { String dataSetParameterName = "dataSetName"; ParameterStream stream = ParameterStream.getStream(Session); if (stream.contains(dataSetParameterName)) { Registry.Registry appRegistry = Registry.Registry.getRegistry(Session); DataSet ds = appRegistry.GetDataset((String)stream.get(dataSetParameterName)); foreach (DataColumn dc in ds.Tables[0].Columns) { FeatureList.Items.Add(dc.ColumnName); } } }
protected void Next_Click(object sender, EventArgs e) { if (int.Parse(PCs.Text) > FeatureList.GetSelectedIndices().Count() || PCs.Text.Equals("") || int.Parse(PCs.Text) < 1) { return; } Analysis analysis = (Analysis)Session["analysis"]; ParameterStream stream = ParameterStream.getStream(Session); String[] features = new String[FeatureList.GetSelectedIndices().Count()]; for (int i = 0; i < FeatureList.GetSelectedIndices().Count(); i++) { features[i] = FeatureList.Items[FeatureList.GetSelectedIndices()[i]].Text; } stream.set("selectedFeatures", features); stream.set("numberOfPCs", int.Parse(PCs.Text)); analysis.next(Response, Session); }
protected void Page_PreInit(object sender, EventArgs e) { stream = ParameterStream.getStream(Session); }