Python - 生成分发

时间:2016-03-02 06:33:16

标签: python

使用科学库在python中生成分发

3 个答案:

答案 0 :(得分:1)

目前无法尝试您的代码,但您可以像这样限制缩放器的输入

min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))
data_scaled = min_max_scaler.fit_transform([data])

1这里是错误的值,但它应该只显示概念。链接到文档http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html#sklearn.preprocessing.MinMaxScaler

答案 1 :(得分:1)

让我们从

开始
import pandas as pd
from scipy.stats import norm
from sklearn import preprocessing
from sklearn import mixture
import numpy as np

df = pd.read_csv('test2.csv')

清理:

df.dropna(inplace=True)

然后,您要将日志应用于所有数据。通常需要将数据计算为0(或接近0)值。因子alpha决定了插补因子 - 0表示根本没有插补。

alpha = 0.01
m = df.as_matrix()
m = alpha * np.ones_like(m) + (1 - alpha) * m
m = np.log(m)

规范化:

m = preprocessing.scale(m)

现在,由于数据很大,我不得不为以下内容进行一些采样。这是1000行的样本:

m = m[np.random.choice(range(m.shape[0]), 1000), :]

平均值和协方差可以用

找到
mu, sigma = np.mean(m), np.cov(m)

这两个参数determine the distribution completely。从这里开始,你可以做很多事情,例如generating further values from the fit distribution

答案 2 :(得分:1)

我不知道您的编码问题的解决方案。但也许你可以考虑使用另一个包。 OpenTURNS是一个python包,包含许多便于统计的东西。您可以使用Student distribution。它还提供多变量版本。

你还写过你得到的'但是不是你需要的那个。您也可以尝试查看非中心学生分发。如果是这种情况,您可能需要使用copula来创建相关边缘。

import openturns as ot
nu = 2
mu = [0.8,0.2]
sigma = [1.2,1.0]
R = ot.CorrelationMatrix(2)
# fill R as needed
print(R)
dist = ot.Student(nu, mu, sigma, R)
#this will draw PDF (for max 2 dims.)
dist.drawPDF()