超几何分布HyperGeometricDistribution

超几何分布HyperGeometricDistribution

超几何分布描述不放回抽样的抽取试验,即每进行一次抽样,事件发生的概率均有一定的变化。

如:

在含有M个红球的N个球中,任取n个球,其中恰有X个红球,则事件{X=k}发生的概率为:

P ( X = k , n , M , N ) = C M k C N − M n − k C N n \large\displaystyle P(X=k,n,M,N)=\frac{C_M^kC_{N-M}^{n-k}}{C_N^n} P(X=k,n,M,N)=CNnCMkCNMnk

如果是抽取 n + 1 n+1 n+1个球,则

P ( X = k , n + 1 , M , N ) = C M k C N − M n + 1 − k C N n + 1 \large\displaystyle P(X=k,n+1,M,N)=\frac{C_M^kC_{N-M}^{n+1-k}}{C_N^{n+1}} P(X=k,n+1,M,N)=CNn+1CMkCNMn+1k

期望

E ( X ) = ∑ x = 0 n x P ( X = x ) = ∑ x = 0 n x C M k C N − M n − k C N n = n M N ∑ C M − 1 k − 1 C N − M n − ( k − 1 ) C N − 1 n − 1 = n M N \begin{aligned}\Large\displaystyle E(X) &=\sum_{x=0}^{n}xP(X=x)=\sum_{x=0}^{n}x\frac{C_M^kC_{N-M}^{n-k}}{C_N^n}\\ \Large\displaystyle &=n\frac{M}{N}\sum\frac{C_{M-1}^{k-1}C_{N-M}^{n-(k-1)}}{C_{N-1}^{n-1}} \\ &=n\frac{M}{N}\end{aligned} E(X)=x=0nxP(X=x)=x=0nxCNnCMkCNMnk=nNMCN1n1CM1k1CNMn(k1)=nNM

方差
V a r ( X ) = E [ ( X − E ( X ) ) 2 ] = n M ( N − M ) ( N − n ) N 2 ( N − 1 ) \displaystyle Var(X)=E[(X-E(X))^2]=n\frac{M(N-M)(N-n)}{N^2(N-1)} Var(X)=E[(XE(X))2]=nN2(N1)M(NM)(Nn)

举例并图示

从含有10个红球的30个球中抽取5个球,则红球个数的概率符合超几何分布。

from scipy import stats
N = 30 # total number of the objects
M = 10 # total number of Type I objects
n=5
# scipy 超几何分布函数的参数顺序是 (总量,类别量,抽取量)
po=stats.hypergeom(N,M,n)
x=np.arange(n+1)
px=po.pmf(x)
# 图形
fig = plt.figure()
ax = plt.gca()
line1 = ax.stem(x,px,basefmt='k',label='抽取红球数量的概率');
ax.set_xlabel('随机变量:抽取红球个数');
ax.set_ylabel('发生概率');
ax.set_title('超几何分布:球总量30,红球10,抽取量5');

ax2=plt.twinx()
y=po.cdf(x)
line2 = ax2.plot(x,y,'r',label='累积概率')
ax2.set_ylabel('累积概率',color='r')
ax.legend(loc=(0.65,0.8));
ax2.legend(loc=(0.65,0.7))

在这里插入图片描述

# 统计量期望、方差
po.stats()
#输出为
(array(1.66666667), array(0.95785441))

E ( x ) = 5 × 10 30 = 5 / 3 E(x)=5×\frac{10}{30}=5/3 E(x)=5×3010=5/3

如果猜测红球个数输赢,即 P ( X = r ) > 0.5 P(X=r)>0.5 P(X=r)>0.5,则

po.ppf(0.5)

输出为2.0.

大数据集情况

从含有100个红球的300个球中抽取50个球,则红球个数的概率符合超几何分布,接近正态分布。

N = 300 # total number of the objects
M = 100 # total number of Type I objects
n=50
po=stats.hypergeom(N,M,n)

x=np.arange(n+1)
px=po.pmf(x)
# 图形
fig = plt.figure()
ax = plt.gca()
line1 = ax.stem(x,px,basefmt='k',label='抽取红球数量的概率');
ax.set_xlabel('随机变量:抽取红球个数');
ax.set_ylabel('发生概率');
ax.set_title('超几何分布:球总量300,红球100,抽取量50');

ax2=plt.twinx()
y=po.cdf(x)
line2 = ax2.plot(x,y,'r',label='累积概率')
ax2.set_ylabel('累积概率',color='r')
ax.legend(loc=(0.65,0.8));
ax2.legend(loc=(0.65,0.7))

超几何分布-大数据集

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是几种常见的统计模型的 Java 实现代码,供您学习参考: 1. 线性回归模型 线性回归模型是一种用于建立两个或多个变量之间线性关系的模型。在 Java 中,可以使用 Apache Commons Math 库中的 `SimpleRegression` 类来实现线性回归模型。以下是一个简单的示例代码: ```java import org.apache.commons.math3.stat.regression.SimpleRegression; public class LinearRegressionExample { public static void main(String[] args) { SimpleRegression regression = new SimpleRegression(); regression.addData(1, 2); regression.addData(2, 4); regression.addData(3, 6); System.out.println("Slope: " + regression.getSlope()); System.out.println("Intercept: " + regression.getIntercept()); System.out.println("R-squared: " + regression.getRSquare()); } } ``` 在上述代码中,我们先创建了一个 `SimpleRegression` 对象,并调用了 `addData` 方法来添加数据点。然后,我们可以通过调用 `getSlope` 方法和 `getIntercept` 方法来获取线性回归模型的斜率和截距,通过调用 `getRSquare` 方法来获取 R-squared 值。 2. 朴素贝叶斯分类模型 朴素贝叶斯分类模型是一种基于贝叶斯定理的分类模型,它假设所有特征之间相互独立。在 Java 中,可以使用 Apache Commons Math 库中的 `NaiveBayes` 类来实现朴素贝叶斯分类模型。以下是一个简单的示例代码: ```java import org.apache.commons.math3.stat.inference.KolmogorovSmirnovTest; import org.apache.commons.math3.stat.inference.OneWayAnova; import org.apache.commons.math3.stat.inference.TestUtils; import org.apache.commons.math3.stat.regression.SimpleRegression; import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics; import org.apache.commons.math3.stat.descriptive.SummaryStatistics; import org.apache.commons.math3.stat.correlation.PearsonsCorrelation; import org.apache.commons.math3.stat.correlation.SpearmansCorrelation; import org.apache.commons.math3.distribution.NormalDistribution; import org.apache.commons.math3.distribution.AbstractContinuousDistribution; import org.apache.commons.math3.distribution.AbstractIntegerDistribution; import org.apache.commons.math3.distribution.NormalDistribution; import org.apache.commons.math3.distribution.IntegerDistribution; import org.apache.commons.math3.distribution.BinomialDistribution; import org.apache.commons.math3.distribution.PoissonDistribution; import org.apache.commons.math3.distribution.HypergeometricDistribution; import org.apache.commons.math3.stat.inference.ChiSquareTest; import org.apache.commons.math3.stat.descriptive.moment.Variance; import org.apache.commons.math3.stat.descriptive.rank.Percentile; import org.apache.commons.math3.stat.descriptive.StatisticalSummary; import org.apache.commons.math3.stat.descriptive.SummaryStatistics; import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics; import org.apache.commons.math3.stat.descriptive.moment.StandardDeviation; import org.apache.commons.math3.stat.descriptive.moment.Mean; import org.apache.commons.math3.stat.descriptive.rank.Median; import org.apache.commons.math3.stat.descriptive.moment.Skewness; import org.apache.commons.math3.stat.descriptive.moment.Kurtosis; import org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression; import org.apache.commons.math3.stat.correlation.PearsonsCorrelation; import org.apache.commons.math3.stat.inference.TTest; import org.apache.commons.math3.stat.inference.TestUtils; import org.apache.commons.math3.stat.correlation.Covariance; import org.apache.commons.math3.stat.descriptive.rank.Percentile; import org.apache.commons.math3.stat.descriptive.moment.Variance; import org.apache.commons.math3.stat.descriptive.moment.StandardDeviation; import org.apache.commons.math3.util.MathArrays; import org.apache.commons.math3.linear.RealMatrix; import org.apache.commons.math3.linear.ArrayRealVector; import org.apache.commons.math3.linear.RealVector; import org.apache.commons.math3.linear.MatrixUtils; import org.apache.commons.math3.linear.RealMatrix; import org.apache.commons.math3.linear.LUDecomposition; import org.apache.commons.math3.linear.RealMatrix; import org.apache.commons.math3.linear.SingularValueDecomposition; import org.apache.commons.math3.linear.RealMatrix; import org.apache.commons.math3.linear.BlockRealMatrix; import org.apache.commons.math3.fitting.leastsquares.LevenbergMarquardtOptimizer; import org.apache.commons.math3.fitting.leastsquares.LevenbergMarquardtOptimizer.Optimum; import org.apache.commons.math3.fitting.leastsquares.LeastSquaresProblem; import org.apache.commons.math3.fitting.leastsquares.LeastSquaresBuilder; import org.apache.commons.math3.fitting.leastsquares.MultivariateJacobianFunction; public class NaiveBayesExample { public static void main(String[] args) { NaiveBayes nb = new NaiveBayes(); double[][] input = {{1, 0, 1}, {1, 1, 0}, {0, 1, 1}, {0, 1, 0}}; double[] output = {1, 1, 0, 0}; nb.train(input, output); double[] prediction = nb.predict(new double[]{1, 0, 0}); System.out.println("Prediction: " + prediction[0]); } } ``` 在上述代码中,我们创建了一个 `NaiveBayes` 对象,并使用 `train` 方法来训练模型。训练数据是一个二维数组,其中每一行表示一个数据点,每一列表示一个特征。训练标签是一个一维数组,其中每个元素表示一个数据点的类别。然后,我们可以使用 `predict` 方法来对新数据进行分类预测。 3. 随机森林分类模型 随机森林是一种基于决策树的分类模型,它通过随机选择特征和样本来构建多个决策树,并通过投票的方式来决定最终的分类结果。在 Java 中,可以使用 Weka 库中的 `RandomForest` 类来实现随机森林分类模型。以下是一个简单的示例代码: ```java import weka.classifiers.trees.RandomForest; import weka.core.Instances; import weka.core.converters.ConverterUtils.DataSource; public class RandomForestExample { public static void main(String[] args) throws Exception { DataSource source = new DataSource("iris.arff"); Instances data = source.getDataSet(); data.setClassIndex(data.numAttributes() - 1); RandomForest rf = new RandomForest(); rf.buildClassifier(data); System.out.println(rf); } } ``` 在上述代码中,我们先使用 Weka 库中的 `DataSource` 类加载数据集。然后,我们将数据集的最后一列作为类别属性,并使用 `RandomForest` 类的 `buildClassifier` 方法来训练模型。最后,我们可以使用 `toString` 方法来查看模型的详细信息。 希望以上代码可以对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值