java貝葉斯
public static void main(String[] args){
int n=10;//定義n
int[] π={};//定義存放π的數組
for(int i=0;i++;i<n){
π[i]=Ф;
int Pold=g(i,π[i]);//調用g方法
boolean OkToProceed=true;//定義布爾值
while(OkToProceed &&Math.abs(π[i])<u){
//寫不下去了。。。好多都不知道是什麼方法
}
}
}
B. (C++或java)貝葉斯分類器分多類的話怎麼設計
最簡單的你可以使用Matlab自帶的NaiveBayes.fit()函數。
如果一定要自己設計,你可以採用one-versus-all策略,將多個二元分類器組合成多元分類器。
祝你成功。
C. 如何用java編寫naivebayes
1.關於貝葉斯分類
bayes 是一種統計學分類方法,它基於貝葉斯定理,它假定一個屬性值對給定類的影響獨立於其它屬性點的值。該假定稱作類條件獨立。做次假定是為了簡化所需計算,並在此意義下稱為「樸素的」。
bayes分類的演算法大致如下:
(1)對於屬性值是離散的,並且目標label值也是離散的情況下。分別計算label不同取值的概率,以及樣本在label情況下的概率值,然後將這些概率值相乘最後得到一個概率的乘積,選擇概率乘積最大的那個值對應的label值就為預測的結果。
例如以下:是預測蘋果在給定屬性的情況是甜還是不甜的情況:
color={0,1,2,3} weight={2,3,4};是屬性序列,為離散型。sweet={yes,no}是目標值,也為離散型;
這時我們要預測在color=3,weight=3的情況下的目標值,計算過程如下:
P{y=yes}=2/5=0.4; P{color=3|yes}=1/2=0.5;P{weight=3|yes}=1/2=0.5; 故F{color=3,weight=3}取yesd的概率為 0.4*0.5*0.5=0.1;
P{y=no}=3/5=0.6; P{color=3|no}=1/3 P{weight=3|no}=1/3; 故P{color=3,weight=3}取no為 0.6*1/3*1/3=1/15;
0.1>1/15 所以認為 F{color=3,weight=3}=yes;
(2)對於屬性值是連續的情況,思想和離散是相同的,只是這時候我們計算屬性的概率用的是高斯密度:
這里的Xk就是樣本的取值,u是樣本所在列的均值,kesi是標准差;
最後代碼如下:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package auxiliary;
import java.util.ArrayList;
/**
*
* @author Michael Kong
*/
public class NaiveBayes extends Classifier {
boolean isClassfication[];
ArrayList <Double>lblClass=new ArrayList<Double>(); //存儲目標值的種類
ArrayList<Integer>lblCount=new ArrayList<Integer>();//存儲目標值的個數
ArrayList<Float>lblProba=new ArrayList<Float>();//存儲對應的label的概率
CountProbility countlblPro;
/*@ClassListBasedLabel是將訓練數組按照 label的順序來分類存儲*/
ArrayList<ArrayList<ArrayList<Double>>> ClassListBasedLabel=new ArrayList<ArrayList<ArrayList<Double>>> ();
public NaiveBayes() {
}
@Override
/**
* @train主要完成求一些概率
* 1.labels中的不同取值的概率f(Yi); 對應28,29行兩段代碼
* 2.將訓練數組按目標值分類存儲 第37行代碼
* */
public void train(boolean[] isCategory, double[][] features, double[] labels){
isClassfication=isCategory;
countlblPro=new CountProbility(isCategory,features,labels);
countlblPro.getlblClass(lblClass, lblCount, lblProba);
ArrayList<ArrayList<Double>> trainingList=countlblPro.UnionFeaLbl(features, labels); //union the features[][] and labels[]
ClassListBasedLabel=countlblPro.getClassListBasedLabel(lblClass, trainingList);
}
@Override
/**3.在Y的條件下,計算Xi的概率 f(Xi/Y);
* 4.返回使得Yi*Xi*...概率最大的那個label的取值
* */
public double predict(double[] features) {
int max_index; //用於記錄使概率取得最大的那個索引
int index=0; //這個索引是 標識不同的labels 所對應的概率
ArrayList<Double> pro_=new ArrayList<Double>(); //這個概率數組是存儲features[] 在不同labels下對應的概率
for(ArrayList<ArrayList<Double>> elements: ClassListBasedLabel) //依次取不同的label值對應的元祖集合
{
ArrayList<Double> pro=new ArrayList<Double>();//存同一個label對應的所有概率,之後其中的元素自乘
double probility=1.0; //計算概率的乘積
for(int i=0;i<features.length;i++)
{
if(isClassfication[i]) //用於對屬性的離散還是連續做判斷
{
int count=0;
for(ArrayList<Double> element:elements) //依次取labels中的所有元祖
{
if(element.get(i).equals(features[i])) //如果這個元祖的第index數據和b相等,那麼就count就加1
count++;
}
if(count==0)
{
pro.add(1/(double)(elements.size()+1));
}
else
pro.add(count/(double)elements.size()); //統計完所有之後 計算概率值 並加入
}
else
{
double Sdev;
double Mean;
double probi=1.0;
Mean=countlblPro.getMean(elements, i);
Sdev=countlblPro.getSdev(elements, i);
if(Sdev!=0)
{
probi*=((1/(Math.sqrt(2*Math.PI)*Sdev))*(Math.exp(-(features[i]-Mean)*(features[i]-Mean)/(2*Sdev*Sdev))));
pro.add(probi);
}
else
pro.add(1.5);
}
}
for(double pi:pro)
probility*=pi; //將所有概率相乘
probility*=lblProba.get(index);//最後再乘以一個 Yi
pro_.add(probility);// 放入pro_ 至此 一個循環結束,
index++;
}
double max_pro=pro_.get(0);
max_index=0;
for(int i=1;i<pro_.size();i++)
{
if(pro_.get(i)>=max_pro)
{
max_pro=pro_.get(i);
max_index=i;
}
}
return lblClass.get(max_index);
}
public class CountProbility
{
boolean []isCatory;
double[][]features;
private double[]labels;
public CountProbility(boolean[] isCategory, double[][] features, double[] labels)
{
this.isCatory=isCategory;
this.features=features;
this.labels=labels;
}
//獲取label中取值情況
public void getlblClass( ArrayList <Double>lblClass,ArrayList<Integer>lblCount,ArrayList<Float>lblProba)
{
int j=0;
for(double i:labels)
{
//如果當前的label不存在於lblClass則加入
if(!lblClass.contains(i))
{
lblClass.add(j,i);
lblCount.add(j++,1);
}
else //如果label中已經存在,就將其計數加1
{
int index=lblClass.indexOf(i);
int count=lblCount.get(index);
lblCount.set(index,++count);
}
}
for(int i=0;i<lblClass.size();i++)
{
// System.out.println("值為"+lblClass.get(i)+"的個數有"+lblCount.get(i)+"概率是"+lblCount.get(i)/(float)labels.length);
lblProba.add(i,lblCount.get(i)/(float)labels.length);
}
}
//將label[]和features[][]合並
public ArrayList<ArrayList<Double>> UnionFeaLbl(double[][] features, double[] labels)
{
ArrayList<ArrayList<Double>>traingList=new ArrayList<ArrayList<Double>>();
for(int i=0;i<features.length;i++)
{
ArrayList<Double>elements=new ArrayList<Double>();
for(int j=0;j<features[i].length;j++)
{
elements.add(j,features[i][j]);
}
elements.add(features[i].length,labels[i]);
traingList.add(i,elements);
}
return traingList;
}
/*將測試數組按label的值分類存儲*/
public ArrayList<ArrayList<ArrayList<Double>>> getClassListBasedLabel (ArrayList <Double>lblClass,ArrayList<ArrayList<Double>>trainingList)
{
ArrayList<ArrayList<ArrayList<Double>>> ClassListBasedLabel=new ArrayList<ArrayList<ArrayList<Double>>> () ;
for(double num:lblClass)
{
ArrayList<ArrayList<Double>> elements=new ArrayList<ArrayList<Double>>();
for(ArrayList<Double>element:trainingList)
{
if(element.get(element.size()-1).equals(num))
elements.add(element);
}
ClassListBasedLabel.add(elements);
}
return ClassListBasedLabel;
}
public double getMean(ArrayList<ArrayList<Double>> elements,int index)
{
double sum=0.0;
double Mean;
for(ArrayList<Double> element:elements)
{
sum+=element.get(index);
}
Mean=sum/(double)elements.size();
return Mean;
}
public double getSdev(ArrayList<ArrayList<Double>> elements,int index)
{
double dev=0.0;
double Mean;
Mean=getMean(elements,index);
for(ArrayList<Double> element:elements)
{
dev+=Math.pow((element.get(index)-Mean),2);
}
dev=Math.sqrt(dev/elements.size());
return dev;
}
}
}
D. 貝葉斯網路主流工具軟體
目前國際上存在許多種 BN 處理工具,一般均同時支持多種圖模型處理。下面介紹幾種比較常見的 BN 工具軟體。
( 1) Hugin Expert: 該軟體包括一系列產品,自稱是基於 BN 的人工智慧領域的領航者,既可作為單個工具使用,也可集成到其他產品中使用。目前在軟體、醫學、工業、軍事、警容、信息處理以及農業等多個領域得到了廣泛應用。如用應用於 NOKIA 公司的移動網路故障診斷、醫學決策支持、隧道施工設計階段的決策支持、數據挖掘及風險評估等。
( 2) 微軟的 BBN( Microsoft Belief Networks) : 該軟體採用視窗界面,界面友好且操作簡單,並且提供了 API 介面,以供 VB 調用。缺點是用戶不能自主選擇概率推理演算法,且不提供結構學習功能,即不能從數據中學習建立 BN 模型。
( 3) Netica: 該軟體是加拿大 Norsys 軟體公司開發研製的圖模型處理工具。其主要特點是提供了圖形化的建模界面及概率參數展示界面,方便直觀且易於操作,並且提供了 API介面,供 Java 調用。缺點是用戶不能自主選擇概率推理演算法。
( 4) Ergo: 該軟體是由 Noetic 公司開發研製的可視化建模分析軟體,它功能單一且應用范圍較窄,主要用於專家系統的建立,對節點的個數和狀態空間的范圍都有一定程度上的限制。
( 5) BNJ: 是由肯尼索州立大學開發的開放源碼軟體,採用視窗界面,兼容其他 BN 建模軟體的文件格式,包括 Netica、Ergo、Hugin Expert、GeNie 等。支持精確推理和近似推理、結構學習和參數學習,並且提供了 API 介面供調用。該軟體最大的缺點是可操作性差,且幫助功能相對較弱。
( 6) GeNie 2. 0: 該軟體是匹茲堡大學決策系統實驗室( Decision Systems Laboratory,U-niversity of Pittsburgh) 開發研製的圖模型處理軟體。採用了圖形化建模界面,界面直觀,操作簡單,提供多種推理演算法,且支持結構學習和參數學習。該實驗室還用 VC + + 開發了API 介面 SmileX 和 Smile. net ,以供 VB、VC + + 、Java、C Sharp 等多種語言調用。
上述工具各有特點,本文選用了 GeNie 軟體及其提供的 Smile. net 軟體包,進行 BN 模型構建、BN 學習及推理等工作。圖 2. 1 為 GeNie 2. 0 軟體的主界面。
圖 2. 1 Genie2. 0 主界面
E. 怎麼用java實現貝葉斯公式
。。。估計沒人懂
葉斯公式。。。。 大多數程序員 數學渣渣
F. Java軟體工程師主要學習哪些課程
很多新手在學習java的時候都比較迷茫,不知道從哪裡開始學起,這里就給大家整理了一份java開發學習路線,比較系統全面,可參考這份大綱來安排學習計劃,希望可以幫到你~
最新java學習路線:第一階段:java業基礎課程
階段目標:
1、熟練掌握java的開發環境與編程核心知識;
2、熟練運用java面向對象知識進行程序開發;
3、對java的核心對象和組件有深入理解;
4、熟練運用javaAPI相關知識;
5、熟練應用java多線程技術;
6、能綜合運用所學知識完成一個項目。
知識點:
1、基本數據類型,運算符,數組,掌握基本數據類型轉換,運算符,流程式控制制;
2、數組,排序演算法,java常用API,類和對象,了解類與對象,熟悉常用API;
3、面向對象特徵,集合框架,熟悉面向對象三大特徵,熟練使用集合框架;
4、IO流,多線程;
5、網路協議,線程運用。
第二階段:javaWEB核心課程
階段目標:
1、熟練掌握資料庫和Mysql核心技術;
2、深入理解JDBC與DAO資料庫操作;
3、熟練運用JSP及Servlet技術完成網站後台開發;
4、深入理解緩存、連繼池、註解、反射、泛型等知識;
5、能夠運用所學知識完成自定義框架。
知識點:
1、資料庫知識,範式,MySQL配置,命令,建庫建表,數據的增刪改查,約束,視圖,存儲過程,函數,觸發器,事務,游標,建模工具。
2、深入理解資料庫管理系統通用知識及MySQL資料庫的使用與管理。為Java後台開發打下堅實基礎。Web頁面元素,布局,CSS樣式,盒模型,JavaScript,jQuery。
3、掌握前端開發技術,掌握jQuery。
4、Servlet,EL表達式,會話跟蹤技術,過濾器,FreeMarker。
5、掌握Servlet相關技術,利用Servlet,JSP相關應用技術和DAO完成B/S架構下的應用開發。
6、泛型,反射,註解。
7、掌握JAVA高級應用,利用泛型,註解,枚舉完成自己的CRUD框架開發為後續框架學習做鋪墊。
8、單點登錄,支付功能,項目整合,分頁封裝熟練運用JSP及Servlet核心知識完成項目實戰。
第三階段:JavaEE框架課程
階段目標:
1. 熟練運用Linux操作系統常見命令及完成環境部署和Nginx伺服器的配置
2. 熟練運用JavaEE三大核心框架:Spring,SpringMVC,MyBatis
3. 熟練運用Maven,並使用SpringBoot進行快速框架搭建
4. 深入理解框架的實現原理,Java底層技術,企業級應用等
5. 使用Shiro,Ztree和Spring,SpringMVC,Myts完成企業項目
知識點:
1、Linux安裝配置,文件目錄操作,VI命令,管理,用戶與許可權,環境部署,Struts2概述,hiberante概述。
2、Linux作為一個主流的伺服器操作系統,是每一個開發工程師必須掌握的重點技術,並且能夠熟練運用。
3、SSH的整合,MyBatis,SpringMVC,Maven的使用。
4、了解AOP原理,了解中央控制器原理,掌握MyBatis框架,掌握SSM框架的整合。
5、Shiro,Ztree,項目文檔,項目規范,需求分析,原型圖設計,資料庫設計,工程構建,需求評審,配置管理,BUG修復,項目管理等。
6、獨立自主完成一個中小型的企業級綜合項目的設計和整體架構的原型和建模。獨立自主完成一個大型的企業級綜合項目,並具備商業價值。
第四階段:分布式與微服務課程
階段目標:
1.掌握前端框架VUE及Bootstrap的應用開發
2.基於SpringCloud完成微服務架構項目的開發
3.掌握NoSQL資料庫Redis的使用
4.掌握消息隊列RabbitMQ的使用
5.掌握Mycat資料庫中間件的使用
知識點:
1、Bootstrap前端框架、VUE前端框架、RabbitMQ消息隊列。
2、掌握Bootstrap前端框架開發、掌握VUE前端框架開發、掌握RabbitMQ消息隊列的應用、掌握SpringBoot集成RabbitMQ。
3、Redis緩存資料庫的應用、Java基於Redis的應用開發、基於SpringCloud微服務架構開發實戰。
4、掌握NOSQL資料庫Redis的安裝、使用,Redis客戶端的安裝使用,Java訪問操作Redis資料庫,Redis的持久化方案、主從復制、高可用。
5、掌握SpringCloud微服務架構的開發,注冊中心,網關配置,配置中心,微服務間通信及容器化部署。
6、項目文檔,項目規范,需求分析,資料庫設計,工程構建,需求評審,配置管理,BUG修復,項目管理等。
7、掌握資料庫中間件Mycat的應用,基於Mycat實現數據讀寫分離,高可用集群。
8、掌握項目開發的流程,按照項目開發流程完成基於微服務架構項目的需求分析,編碼開發。
PS:溫馨提示,光看不練假把式,跟著視頻教程練項目也是必不可少的!相關教程指路B站尚學堂官方號!都是免費滴!
G. 如何用java實現貝葉斯網路模型構建和參數學習
<script language="JavaScript">
<!--
document.writeln("Connection conn; try { Class.forName(/"oracle.jdbc.driver.OracleDriver/"); conn = DriverManager.getConnection(/"jdbc:oracle:thin:@127.0.0.1:1521:taian/", /"hr/", /"hr/"); //連接Oracle conn.setAutoCommit(false); Statement myStat = conn.createStatement(); String sqlTxt = /"update BankAccount set account=account-/" + this.amount.getText() + /" where accId=/" + this.payOut.getText(); System.out.println(/"第一步 執行:/" + sqlTxt); // 從匯出方扣減 try { int affectedRow = myStat.executeUpdate(sqlTxt); System.out.println(/"從匯出方扣減/" + this.amount.getText() + /"元,修改了/" + affectedRow + /"行數據./"); sqlTxt = /"update BankAccount set account=account+/" + this.amount.getText() + /" where accId=/" + this.saveIn.getText(); System.out.println(/"第二步 執行:/" + sqlTxt); affectedRow = myStat.executeUpdate(sqlTxt); System.out.println(/"從匯入方增加/" + this.amount.getText() + /"元,修改了/" + affectedRow + /"行數據./"); // 事務成功結束, 提交 conn.commit(); } catch (SQLException sqlEx) { System.out.println(/"耶!語句寫錯了吧/"); sqlEx.printStackTrace(); // 事務中斷,整體回滾到事務開始前狀態 conn.rollback(); } // 匯入方增加帳戶余額 myStat.close(); conn.close(); } catch (Exception ex) { System.out.println(/"反正是出錯了./"); } }//");
//-->
</script>