Выбор функции хи-квадрат работает с категориальными данными
ChiSqSelector
обозначает выбор функции хи-квадрат.Он работает с помеченными данными с категориальными признаками
Поэтому обе функции одинаково хороши (хотя следует подчеркнуть, что обе функции можно использовать для получения тривиальных совершенных классификаторов, даже если они используются в качестве непрерывных переменных).
import org.apache.spark.mllib.linalg.{Vectors => OldVectors}
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.stat.Statistics
Statistics.chiSqTest(sc.parallelize(data.map {
case (_, v, l) => LabeledPoint(l, OldVectors.fromML(v))
})).slice(2, 4)
Array[org.apache.spark.mllib.stat.test.ChiSqTestResult] =
Array(Chi squared test summary:
method: pearson
degrees of freedom = 2
statistic = 3.0
pValue = 0.22313016014843035
No presumption against null hypothesis: the occurrence of the outcomes is statistically independent.., Chi squared test summary:
method: pearson
degrees of freedom = 2
statistic = 3.0000000000000004
pValue = 0.22313016014843035
No presumption against null hypothesis: the occurrence of the outcomes is statistically independent..)
и результаты испытаний соответствуют другим инструментам.Например, в R ( используется в качестве ссылки для проверки селектора ):
y <- as.factor(c("1.0", "0.0", "0.0"))
x2 <- as.factor(c("18.0", "12.0", "15.0"))
x3 <- as.factor(c("1.0", "0.0", "0.1"))
chisq.test(table(x2, y))
Pearson's Chi-squared test
data: table(x2, y)
X-squared = 3, df = 2, p-value = 0.2231
Warning message:
In chisq.test(table(x2, y)) : Chi-squared approximation may be incorrect
chisq.test(table(x3, y))
Pearson's Chi-squared test
data: table(x3, y)
X-squared = 3, df = 2, p-value = 0.2231
Warning message:
In chisq.test(table(x3, y)) : Chi-squared approximation may be incorrect
Поскольку селектор просто сортирует данные по p-значению и sortBy
является стабильным , он первым пришел, первым обслужен.Если вы переключите порядок функции, будет выбрана другая.