Advertisement
Guest User

Untitled

a guest
May 20th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.11 KB | None | 0 0
  1. import java.io.FileNotFoundException;
  2. import java.io.PrintWriter;
  3. import java.io.Serializable;
  4. import java.util.ArrayList;
  5. import java.util.HashMap;
  6. import java.util.HashSet;
  7. import java.util.Map;
  8. import java.util.Random;
  9. import java.util.Set;
  10. import java.util.logging.Level;
  11. import java.util.logging.Logger;
  12.  
  13. /**
  14. *
  15. * @author ghost
  16. */
  17. public class BayesClassifier implements Serializable{
  18. private int soluongclass;
  19. private float[] pc;
  20. private int[] soluongtungclass;
  21. private Map<String, Float> probability = new HashMap<String, Float>();
  22. private int[][] rest;
  23. public BayesClassifier(int soluongclass) {
  24. this.soluongclass = soluongclass;
  25. pc = new float[soluongclass];
  26. soluongtungclass = new int[soluongclass];
  27. for(int i = 0; i < soluongclass; i ++)
  28. {
  29. soluongtungclass[i] = 0;
  30. }
  31. }
  32. //học từ bộ dữ liệu data, với nhãn là label.
  33. public void learn(ArrayList<String> data, int[] label)
  34. {
  35. for(int i = 0; i < data.size(); i ++)
  36. {
  37. soluongtungclass[label[i]] += 1;
  38. String tam2 = data.get(i);
  39. tam2 = xulychuoi(tam2);
  40. for(String s: tam2.split("\\s+"))
  41. {
  42. String tam = s + "\n" +Integer.toString(label[i]);
  43.  
  44. if(probability.containsKey(tam))
  45. {
  46. probability.replace(tam, new Float(probability.get(tam).floatValue() + 1));
  47. }else
  48. {
  49. probability.put(tam, new Float(1));
  50. }
  51. }
  52. }
  53. int tong = 0;
  54. for(int i = 0; i < soluongclass; i ++)
  55. {
  56. tong += soluongtungclass[i];
  57. }
  58. System.out.println("TOng: " + tong);
  59. for(int i = 0; i < soluongclass; i ++)
  60. {
  61. pc[i] = (float)soluongtungclass[i] / tong;
  62. System.out.println("i " + pc[i]);
  63. }
  64. for (Map.Entry<String, Float> entry : probability.entrySet())
  65. {
  66. String tam2 = entry.getKey();
  67. String tu = tam2.split("\\n")[0];
  68. int nlabel = Integer.parseInt(tam2.split("\\n")[1]);
  69. probability.replace(tam2, probability.get(tam2).floatValue()/soluongtungclass[nlabel]);
  70. System.out.println(tu +" " +nlabel + " co xac xuat:" + entry.getValue());
  71. }
  72. }
  73. public int predict(String data)
  74. {
  75. data = xulychuoi(data);
  76. int tam = -1;
  77. float max = -1;
  78. for(int i = 0; i < soluongclass; i ++)
  79. {
  80. float xs = pc[i];
  81. System.out.println("Xac xuat class " + i + ":" + pc[i]);
  82. for(String s: data.split("\\s+"))
  83. {
  84. if(probability.containsKey(s + "\n" + i))
  85. {
  86. System.out.println("Tu: " + s + " Trong class " + i + "Co xs:" + probability.get(s + "\n" + i).floatValue());
  87. xs *= probability.get(s + "\n" + i).floatValue();
  88. }else{
  89. System.out.println("Tu: " + s + "khong xuat hien trong bo phan loai: " + i);
  90. }
  91. }
  92. System.out.println("Xac xuat class " + i + ": " + xs );
  93. if(xs > max)
  94. {
  95. max = xs;
  96. tam = i;
  97. }
  98.  
  99. }
  100. System.out.println("Max:" + tam);
  101. return tam;
  102. }
  103. public String xulychuoi(String s)
  104. {
  105. s = s.toLowerCase();
  106. String res = "";
  107. Set<String> s1 = new HashSet<String>();
  108. for(String s2: s.split("\\s+"))
  109. {
  110. s1.add(s2);
  111. }
  112. ArrayList<String> s3 = new ArrayList<String>(s1);
  113. for(String s2: s3)
  114. res += s2 + " ";
  115. return res.trim();
  116. }
  117. //Dự đoán danh sách các bài viết nằm trong bộ dữ liệu data, với nhãn tương ứng là label (kiểu int), ghi ra file number
  118. public int[][] predict(ArrayList<String> data, int[] label, int number)
  119. {
  120. try {
  121. int[] dudoan = new int[label.length];
  122. for(int i = 0; i < data.size(); i ++)
  123. {
  124. dudoan[i] = predict(data.get(i));
  125. System.out.println("Du doan:" + dudoan[i]);
  126. }
  127. int[][] tp = new int[soluongclass][soluongclass];
  128. for(int i = 0; i < soluongclass; i ++)
  129. {
  130. for(int j = 0; j < soluongclass; j ++)
  131. {
  132. tp[i][j] = 0;
  133. }
  134. }
  135. for(int i = 0 ; i < label.length; i ++)
  136. {
  137. if(label[i] == dudoan[i])
  138. {
  139. tp[dudoan[i]][label[i]] += 1;
  140. }else
  141. {
  142. tp[dudoan[i]][label[i]] += 1;
  143. }
  144. }
  145. PrintWriter writer;
  146. writer = new PrintWriter("lan" + number + ".txt");
  147. for (int i = 0; i<soluongclass; i++){
  148. for(int j = 0; j<soluongclass; j++){
  149. writer.print(tp[i][j] + ",");
  150. }writer.println();
  151. }
  152. writer.flush();
  153. writer.close();
  154. } catch (FileNotFoundException ex) {
  155. Logger.getLogger(BayesClassifier.class.getName()).log(Level.SEVERE, null, ex);
  156. }
  157. return null;
  158. }
  159. public static void main(String[] args) throws FileNotFoundException {
  160. int[] tam = new int[8];
  161. ArrayList<String> tam1 = new ArrayList<>();
  162. // tam1.add("Nhà chức trách thông báo bất kỳ người nào cũng có quyền bắt, áp giải nghi phạm Bùi Quang Huy đến cơ quan công an gần nhất.");
  163. // tam1.add("Ngày 18/5, Cơ quan Cảnh sát điều tra (Bộ Công an) ra quyết định truy nã Bùi Quang Huy (Tổng giám đốc Công ty TNHH Thương mại và Dịch vụ kỹ thuật Nhật Cường), 9 ngày sau khi đồng loạt khám xét chuỗi cửa hàng, trung tâm bảo hành của Nhật Cường Mobile.");
  164. // tam1.add("Theo nhà chức trách, bất kỳ người nào cũng có quyền bắt và giải ngay Bùi Quang Huy đến cơ quan công an, viện kiểm sát hoặc UBND nơi gần nhất. Sau khi bắt hoặc tiếp nhận người truy nã, người dân được đề nghị báo về Phòng 14 Cục Cảnh sát điều tra tội phạm về tham nhũng, kinh tế, buôn lậu (C03, Bộ Công an) tại 47 Phạm Văn Đồng, Hà Nội.");
  165. // tam1.add("5 ngày trước, 14/5, C03 đã khởi tố vụ án, khởi tố bị can, khám xét với Bùi Quang Huy cùng 8 người về tội Buôn lậu theo khoản 4 điều 188 Bộ luật Hình sự 2015 và tội Vi phạm quy định về kế toán gây hậu quả nghiêm trọng, theo điều 221 Bộ luật Hình sự 2015. Lệnh bắt tạm giam với những người này được ban hành song ông chủ của Nhật Cường đã bỏ trốn, hiện không rõ ở đâu.");
  166. // tam1.add("Bùi Quang Huy bị cáo buộc cùng các đồng phạm đã thực hiện hành vi phạm tội buôn lậu xuyên quốc gia; lập, sử dụng hai hệ thống sổ sách kế toán nhằm để ngoài sổ sách hàng nghìn tỷ đồng doanh thu; nhập lậu nhiều thiết bị điện tử sau khi móc nối với một số nhà sản xuất ở nước ngoài.");
  167. // tam1.add("Nhật Cường Mobile là thương hiệu thuộc sở hữu của Công ty TNHH Thương mại và Dịch vụ kỹ thuật Nhật Cường. Hệ thống có 9 cửa hàng bán lẻ tại Hà Nội, một trung tâm bảo hành và một trung tâm ERP tại TP HCM.");
  168. // tam1.add("Theo thông tin đăng ký doanh nghiệp, Nhật Cường có vốn điều lệ 38 tỷ đồng, Tổng giám đốc là Bùi Quang Huy cũng là người đại diện pháp luật của Công ty TNHH giải pháp phần mềm Nhật Cường (Nhật Cường Software).");
  169. // tam1.add("Ngày 19/5, Công an Bình Dương xác định danh tính hai nạn nhân trong vụ phi tang đổ bêtông là Trần Đức Linh (quê Nghệ An) và Trần Trí Thành (quê TP HCM). Cả hai tử vong và bị phi tang xác cách nhau vài tháng.");
  170. tam1.add("day la mot");//1
  171. tam1.add("la loai day Bai");//1
  172. tam1.add("bo loai");//1
  173. tam1.add("phan");//0
  174. tam1.add("phan");//0
  175. tam1.add("Bai day la mot bo phan");//0
  176. tam1.add("loai bayes");//0
  177. tam1.add("loai cho phan ");//0
  178. for(int i = 0; i < 8; i ++)
  179. {
  180. if(i > 2)
  181. tam[i] = 0;
  182. else
  183. tam[i] = 1;
  184. }
  185. BayesClassifier b = new BayesClassifier(3);
  186. b.learn(tam1, tam);
  187. ArrayList<String> tam2 = new ArrayList<>();
  188. tam2.add("Bai toan phan loai bayes");
  189. int[] lb = new int[1];
  190. lb[0] = 1;
  191. b.predict(tam2, lb, 1);
  192. //b.predict("Bai toan phan loai bayes");
  193. //System.out.println(b.xulychuoi("Day la mot bo day Nhe la mot Bo"));
  194. }
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement