0

我有一个标称值向量,我需要知道每个标称值出现的概率。基本上,我需要那些来获得min, max, mean, std观察标称值的概率并获得Class Entropy值。

例如,假设有一个数据集,其中目标预测 0、1 或 2。在训练数据集中。我们可以计算其目标为 1 的记录数,并调用它n_1,类似地我们可以定义n_0n_2。那么,在训练数据集中观察到第 1 类的概率很简单p_1=n_1/(n_0 + n_2)。一旦得到p_0p_1p_2,就可以得到这些概率的最小值、最大值、平均值和标准值。

在 python 中很容易得到pandas,但要避免两次读取数据集。我想知道是否有任何 CAS 行动SAS可以提供给我。请注意,我通过 SAS 使用 Python API,swat并且我需要在 python 中有 API。

4

1 回答 1

1

我找到了以下解决方案,它工作正常。它用于s.dataPreprocess.highcardinality获取类的数量,然后用于s.dataPreprocess.binning获取每个类中的观察数。然后,只有一些简单的计算。

import swat 
# create a CAS server 
s = swat.CAS(server, port)

# load the table 
tbl_name = 'hmeq'
s.upload("./data/hmeq.csv", casout=dict(name=tbl_name, replace=True))

# call to get the number of classes
cardinality_result = s.dataPreprocess.highcardinality(table=tbl_name, vars=[target_var])
cardinality_result_df = pd.DataFrame(cardinality_result["HighCardinalityDetails"])
number_of_classes = int(cardinality_result_df["CardinalityEstimate"])

# call dataPreprocess.binning action to get the probability of each class  
s.loadactionset(actionset="dataPreprocess")
result_binning = s.dataPreprocess.binning(table=tbl_name, vars=[target_var], nBinsArray=[number_of_classes])
result_binning_df = pd.DataFrame(result_binning["BinDetails"])

probs = result_binning_df["NInBin"]/result_binning_df["NInBin"].sum()
prob_min = probs.min()
prob_max = probs.max()
prob_mean = probs.mean()
prob_std = probs.std()        
entropy = -sum(probs*np.log2(probs))
于 2020-02-12T22:00:57.210 回答