Github user sachingoel0101 commented on a diff in the pull request: https://github.com/apache/flink/pull/861#discussion_r37141076 --- Diff: docs/libs/ml/statistics.md --- @@ -0,0 +1,108 @@ +--- +mathjax: include +htmlTitle: FlinkML - Statistics +title: <a href="../ml">FlinkML</a> - Statistics +--- +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +* This will be replaced by the TOC +{:toc} + +## Description + + The statistics utility provides features such as building histograms over data, determining + mean, variance, gini impurity, entropy etc. of data. + +## Methods + + The Statistics utility provides two major functions: `createHistogram` and `dataStats`. + +### Creating a histogram + + There are two types of histograms: + <ul> + <li> + <strong>Continuous Histograms</strong>: These histograms are formed on a data set `X: DataSet[Double]` + when the values in `X` are from a continuous range. These histograms support + `quantile` and `sum` operations. Here `quantile(q)` refers to a value $x_q$ such that $|x: x + \leq x_q| = q * |X|$. Further, `sum(s)` refers to the number of elements $x \leq s$, which can + be construed as a cumulative probability value at $s$[Of course, <i>scaled</i> probability]. + <br> + A continuous histogram can be formed by calling `X.createHistogram(b)` where `b` is the + number of bins. + </li> + <li> + <strong>Categorical Histograms</strong>: These histograms are formed on a data set `X:DataSet[Double]` + when the values in `X` are from a discrete distribution. These histograms + support `count(c)` operation which returns the number of elements associated with cateogry `c`. + <br> + A categorical histogram can be formed by calling `X.createHistogram(0)`. + </li> + </ul> + +### Data Statistics + + The `dataStats` function operates on a data set `X: DataSet[Vector]` and returns column-wise + statistics for `X`. Every field of `X` is allowed to be defined as either <i>discrete</i> or + <i>continuous</i>. + <br> + Statistics can be evaluated by calling `DataStats.dataStats(X)` or + `DataStats.dataStats(X, discreteFields`). The latter is used when some fields are needed to be + declared discrete-valued, and is provided as an array of indices of fields which are discrete. + <br> + The following information is available as part of `DataStats`: + <ul> + <li>Number of elements in `X`</li> + <li>Dimension of `X`</li> + <li>Column-wise statistics where for discrete fields, we report counts for each category, and + the Gini impurity and Entropy of the field, while for continuous fields, we report the + minimum, maximum, mean and variance. + </li> + </ul> + +## Examples + +{% highlight scala %} + +import org.apache.flink.ml.statistics._ +import org.apache.flink.ml._ + +val X: DataSet[Double] = ... +// Create continuous histogram +val histogram = X.createHistogram(5) // creates a histogram with five bins +histogram.quantile(0.3) // returns the 30th quantile +histogram.sum(4) // returns number of elements less than 4 --- End diff -- You're right. I'm wondering if we should provide two methods for this purpose. Otherwise user will need to cast into the appropriate class.
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. ---