[code] em

EM_init 中调用多次kmeans, 取得其中最佳的聚类结果, 并赋值:

    m_num_clusters = bestK.numberOfClusters();
    m_weights = new double[inst.numInstances()][m_num_clusters];
    m_model = new DiscreteEstimator[m_num_clusters][m_num_attribs];
    m_modelNormal = new double[m_num_clusters][m_num_attribs][3];
    m_priors = new double[m_num_clusters];

并得到最佳kmeans聚类的m_num_clusters个质心, 利用最佳kmeans的聚类结果初始化

1) 对离散属性使用m_model[numInstance][numCluster];

2) 对数值属性使用m_modelNormal[numInstance][numCluster][3], 其中第3维的 [0]表示均值,[1]表示方差, [2]表示该样本该属性的权重【权重默认都是1】

3) m_priors[numCluster] 保存了根据最佳kmeans结果得到的每个cluster的先验概率 

4) m_weights[numInstance][numCluster] 未赋值, 都是初值0; 保存的是每个样本属于每个类的权重

 

然后迭代EM。

E step:

 

 

 

E step:

logDensityForInstance ->logJointDensitiesForInstance->logDensityPerClusterForInstance

 

logDensityPerClusterForInstance计算每个样本属于每个类的weight; 其中会用到m_model[normal]变量

logJointDensitiesForInstance 计算每个样本的联合密度的log:

 

logDensityForInstance  计算给定样本的密度。。?

 

 

 使用 logJointDensitiesForInstance 重新计算m_weights

m_priors[ci] = sigma(instance.m_weights[ci]); 然后对m_priors正规化

 

 

 

M step:

根据m_weights 重新计算m_model与m_modelNormal

 

当E step的两次返回值之差小于m_minStdDev时退出。E step的返回值肯定比上一次返回值要大(EM 算法决定的) 

提供的引用内容未提及在泛微OA中获取em_auth_code的方法,无法根据引用给出具体答案。一般而言,获取em_auth_code可能涉及到泛微OA系统的特定接口调用、认证流程等。通常可以通过以下途径尝试获取: 1. 查阅泛微OA系统的官方文档,官方文档会详细说明系统的各项功能及接口使用方法,可能会有关于获取em_auth_code的说明。 2. 联系泛微OA系统的技术支持人员,他们能够针对系统的具体情况提供准确的指导。 3. 查看系统的开发接口文档,其中可能包含了获取em_auth_code的相关接口及参数说明。 以下是一个假设的获取em_auth_code的代码示例(此代码仅为示例,实际情况需根据泛微OA系统的具体要求进行调整): ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.Map; public class EmAuthCodeFetcher { public static String getEmAuthCode(String apiUrl, Map<String, String> headers, Map<String, String> params) throws Exception { StringBuilder paramString = new StringBuilder(); for (Map.Entry<String, String> entry : params.entrySet()) { if (paramString.length() > 0) { paramString.append("&"); } paramString.append(entry.getKey()).append("=").append(entry.getValue()); } URL url = new URL(apiUrl + "?" + paramString.toString()); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); for (Map.Entry<String, String> entry : headers.entrySet()) { connection.setRequestProperty(entry.getKey(), entry.getValue()); } BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); // 这里假设返回的JSON数据中有em_auth_code字段 // 实际需要根据具体的返回格式进行解析 String emAuthCode = parseEmAuthCodeFromResponse(response.toString()); return emAuthCode; } private static String parseEmAuthCodeFromResponse(String response) { // 这里需要根据实际的JSON格式进行解析 // 示例代码仅为示意,不能直接使用 if (response.contains("em_auth_code")) { int startIndex = response.indexOf("em_auth_code") + "em_auth_code".length() + 2; int endIndex = response.indexOf("\"", startIndex); return response.substring(startIndex, endIndex); } return null; } public static void main(String[] args) { String apiUrl = "https://your-panwei-oa-api-url.com"; Map<String, String> headers = new HashMap<>(); headers.put("Authorization", "Bearer your-access-token"); Map<String, String> params = new HashMap<>(); params.put("param1", "value1"); params.put("param2", "value2"); try { String emAuthCode = getEmAuthCode(apiUrl, headers, params); System.out.println("em_auth_code: " + emAuthCode); } catch (Exception e) { e.printStackTrace(); } } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值