程序猿成长之路之数据挖掘篇——朴素贝叶斯

朴素贝叶斯是数据挖掘分类的基础,本篇文章将介绍一下朴素贝叶斯算法

情景再现

以挑选西瓜为例,西瓜的色泽、瓜蒂、敲响声音、触感、脐部等特征都会影响到西瓜的好坏。那么我们怎么样可以挑选出一个好的西瓜呢?

分析过程

既然挑选西瓜有多个条件可供选择,那么我们可以根据已知的样本数据去获取好瓜的筛选条件,再拿测试的样本数据去匹配,最终得到好瓜的概率。然后我们再根据已知的样本数据去获取坏瓜的筛选条件,拿测试的样本数据去匹配,得到坏瓜的概率,如果好瓜的概率超过坏瓜的概率,那么我们可以认为该瓜是好瓜。

朴素贝叶斯介绍

什么是朴素贝叶斯
官话:朴素贝叶斯(naive Bayes)算法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入输出的联合概率分布。然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。不同于其他分类器,朴素贝叶斯是一种基于概率理论的分类算法;
用个人的话来说:朴素贝叶斯就是基于概率大小进行分类判断的一种方式。就如同上面的西瓜分类,好瓜概率大就认定为是好瓜,否则就认定为坏瓜。

先验概率、似然概率和后验概率
先验概率:根据训练集可以经过统计初步得到的概率,就如同上文所说的好瓜或者坏瓜。标记为P(C)
似然概率:就是在先验概率基础上满足某一定条件的概率。比如当西瓜色泽为青绿色时好瓜的概率。标记为P(x|c)
后验概率:P(c|x) 即我们要求的概率,即P(好瓜|色泽=青绿)

贝叶斯的公式
在这里插入图片描述
公式简单介绍:就拿西瓜为例,P(色泽=青绿|好瓜) = P(色泽青绿) * P(好瓜|色泽青绿) | P(好瓜)
简单整体理解就是,先求色泽青绿的瓜中好瓜的概率然后乘以色泽青绿的瓜的数量就是色泽青绿的好瓜数量,然后除以好瓜的数量就是P(色泽=青绿|好瓜)的概率。

朴素贝叶斯的优势

  1. 实现简单:朴素贝叶斯基于先验概率和似然概率进行后验概率的求解,实现相对简单
  2. 算法较为快捷

扩展学习

求解先验和似然概率
根据大数定律,当训练集包含充足的独立同分布样本时,P(c)可通过各类样本出现的频率来进行估计。
朴素贝叶斯对条件概率分布做了条件独立性的假设。具体来说,条件独立性假设是:
在这里插入图片描述
这里的x(1) -> x(n) 表示各个满足的条件(比如,西瓜的色泽、瓜蒂、敲响声音、触感、脐部等特征)总而言之就是将各个条件满足的概率进行相乘后得到似然概率。

先验概率P©的极大似然估计是
在这里插入图片描述
其中N是样本集的总数,K是类别的总数,I表示事件,这里的意思是满足不同特征的好瓜或者坏瓜的概率。

似然概率P(x|c)的极大似然估计分为离散型和连续型两种计算方式:
离散型的计算方式如下:
在这里插入图片描述
其中,xi^{(j)}代表第i个样本的第j个特征;a{jl}是第j个特征可能取的第l个值。 代入原来的西瓜模型为例,有:
P(色泽= 青绿|好瓜) = I(色泽=青绿,好瓜) / I(好瓜)也就是说好瓜中色泽青绿的概率。
连续型的似然概率计算方式如下:
在这里插入图片描述
也就是说使用正态分布函数进行计算,求出似然概率的值。

拉普拉斯修正
我们可能会遇到这种情况,x(i) 特征的频率为0,那么基于朴素贝叶斯的公式,有似然概率为0,那么会出现计算出的后验概率为0的情况,(如下图所示) 为了避免出现这种情况,我们可以使用拉普拉斯修正算法。
在这里插入图片描述
拉普拉斯修正公式:
在这里插入图片描述
这里的N为特征类型数量(如敲响有清脆、沉闷、浊响三种,那么N = 3),也就是说P(敲响=清脆|好瓜) = (0+1)/(8+3) ≈ 0.091

代码

训练集如下:
在这里插入图片描述

package beiyesi;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;public class BeiyesiUtil2 {private static List<TestItem2> list = new ArrayList<>();static {TestItem2 item1 = new TestItem2();item1.setColor("青绿");item1.setRoot("蜷缩");item1.setSound("浊响");item1.setWenli("清晰");item1.setQibu("凹陷");item1.setTouch("硬滑");item1.setDensity(0.697);item1.setSugerRate(0.46);item1.setGood(true);list.add(item1);TestItem2 item2 = new TestItem2();item2.setColor("乌黑");item2.setRoot("蜷缩");item2.setSound("沉闷");item2.setWenli("清晰");item2.setQibu("凹陷");item2.setTouch("硬滑");item2.setDensity(0.774);item2.setSugerRate(0.376);item2.setGood(true);list.add(item2);TestItem2 item3 = new TestItem2();item3.setColor("乌黑");item3.setRoot("蜷缩");item3.setSound("浊响");item3.setWenli("清晰");item3.setQibu("凹陷");item3.setTouch("硬滑");item3.setDensity(0.634);item3.setSugerRate(0.264);item3.setGood(true);list.add(item3);TestItem2 item4 = new TestItem2();item4.setColor("青绿");item4.setRoot("蜷缩");item4.setSound("沉闷");item4.setWenli("清晰");item4.setQibu("凹陷");item4.setTouch("硬滑");item4.setDensity(0.608);item4.setSugerRate(0.318);item4.setGood(true);list.add(item4);TestItem2 item5 = new TestItem2();item5.setColor("浅白");item5.setRoot("蜷缩");item5.setSound("浊响");item5.setWenli("清晰");item5.setQibu("凹陷");item5.setTouch("硬滑");item5.setDensity(0.556);item5.setSugerRate(0.215);item5.setGood(true);list.add(item5);TestItem2 item6 = new TestItem2();item6.setColor("青绿");item6.setRoot("稍蜷");item6.setSound("浊响");item6.setWenli("清晰");item6.setQibu("稍凹");item6.setTouch("软粘");item6.setDensity(0.403);item6.setSugerRate(0.237);item6.setGood(true);list.add(item6);TestItem2 item7 = new TestItem2();item7.setColor("乌黑");item7.setRoot("稍蜷");item7.setSound("浊响");item7.setWenli("稍糊");item7.setQibu("稍凹");item7.setTouch("软粘");item7.setDensity(0.481);item7.setSugerRate(0.149);item7.setGood(true);list.add(item7);TestItem2 item8 = new TestItem2();item8.setColor("乌黑");item8.setRoot("稍蜷");item8.setSound("浊响");item8.setWenli("清晰");item8.setQibu("稍凹");item8.setTouch("硬滑");item8.setDensity(0.437);item8.setSugerRate(0.211);item8.setGood(true);list.add(item8);TestItem2 item9 = new TestItem2();item9.setColor("乌黑");item9.setRoot("稍蜷");item9.setSound("沉闷");item9.setWenli("稍糊");item9.setQibu("稍凹");item9.setTouch("硬滑");item9.setDensity(0.666);item9.setSugerRate(0.091);item9.setGood(false);list.add(item9);TestItem2 item10 = new TestItem2();item10.setColor("青绿");item10.setRoot("硬挺");item10.setSound("清脆");item10.setWenli("清晰");item10.setQibu("平坦");item10.setTouch("软粘");item10.setDensity(0.243);item10.setSugerRate(0.267);item10.setGood(false);list.add(item10);TestItem2 item11 = new TestItem2();item11.setColor("浅白");item11.setRoot("硬挺");item11.setSound("清脆");item11.setWenli("模糊");item11.setQibu("平坦");item11.setTouch("硬滑");item11.setDensity(0.245);item11.setSugerRate(0.057);item11.setGood(false);list.add(item11);TestItem2 item12 = new TestItem2();item12.setColor("浅白");item12.setRoot("蜷缩");item12.setSound("浊响");item12.setWenli("模糊");item12.setQibu("平坦");item12.setTouch("软粘");item12.setDensity(0.343);item12.setSugerRate(0.099);item12.setGood(false);list.add(item12);TestItem2 item13 = new TestItem2();item13.setColor("青绿");item13.setRoot("稍蜷");item13.setSound("浊响");item13.setWenli("稍糊");item13.setQibu("凹陷");item13.setTouch("硬滑");item13.setDensity(0.639);item13.setSugerRate(0.161);item13.setGood(false);list.add(item13);TestItem2 item14 = new TestItem2();item14.setColor("浅白");item14.setRoot("稍蜷");item14.setSound("沉闷");item14.setWenli("稍糊");item14.setQibu("凹陷");item14.setTouch("硬滑");item14.setDensity(0.657);item14.setSugerRate(0.198);item14.setGood(false);list.add(item14);TestItem2 item15 = new TestItem2();item15.setColor("乌黑");item15.setRoot("稍蜷");item15.setSound("浊响");item15.setWenli("清晰");item15.setQibu("稍凹");item15.setTouch("软粘");item15.setDensity(0.36);item15.setSugerRate(0.37);item15.setGood(false);list.add(item15);TestItem2 item16 = new TestItem2();item16.setColor("浅白");item16.setRoot("蜷缩");item16.setSound("浊响");item16.setWenli("模糊");item16.setQibu("平坦");item16.setTouch("硬滑");item16.setDensity(0.593);item16.setSugerRate(0.042);item16.setGood(false);list.add(item16);TestItem2 item17 = new TestItem2();item17.setColor("青绿");item17.setRoot("蜷缩");item17.setSound("沉闷");item17.setWenli("稍糊");item17.setQibu("稍凹");item17.setTouch("硬滑");item17.setDensity(0.719);item17.setSugerRate(0.103);item17.setGood(false);list.add(item17);}/*** 朴素贝叶斯分类* @param testJson* @return 贝叶斯分类*/@SuppressWarnings("unchecked")public static void calc(TestItem2 ...itemList){//朴素贝叶斯分类try {String date = new SimpleDateFormat("yyyyMMdd").format(new Date());File f = new File("D:/decisionTree/dataset/beiyesi_datas_" + date + ".dat");//读取/写入数据集List<TestItem2> items = new ArrayList<>();if (f.exists()) {try(ObjectInputStream ios = new ObjectInputStream(new FileInputStream(f))) {Object obj = ios.readObject();if (obj instanceof List) {items = (List<TestItem2>)obj;}			for (TestItem2 item:itemList) {System.out.println(item.toString());}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}} else {items = list;try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f))) {oos.writeObject(list);oos.flush();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println("---------start--------");long timepre = System.currentTimeMillis();calc(items,itemList);long timeAfter = System.currentTimeMillis() - timepre;System.out.println("---------end " + timeAfter + "--------");} catch (IllegalArgumentException | IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 朴素贝叶斯分类* @param item* @return* @throws IllegalAccessException * @throws IllegalArgumentException */private static void calc(List<TestItem2> items,TestItem2[] testItems) throws IllegalArgumentException, IllegalAccessException {//使用递归进行朴素贝叶斯分类boolean[] isValid= new boolean[testItems.length];for (int i = 0; i < testItems.length; i++) {isValid[i] = calc(items,testItems[i]);}String date = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());File f = new File("D:/decisionTree/dataset/result_" + date + ".dat");//结果保存if (!f.exists()){try(BufferedWriter writer = new BufferedWriter(new FileWriter(f))) {for (int i = 0; i < testItems.length; i++) {writer.write("测试数据为:");writer.newLine();writer.write(testItems[i].toString());writer.newLine();writer.write("结果为:" + (isValid[i] ? "好瓜":"坏瓜"));writer.newLine();}writer.flush();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {System.out.println("结果已保存");}} else {System.out.println("结果表已存在");}}/*** * @param items* @param condition* @return* @throws IllegalAccessException * @throws IllegalArgumentException */private static boolean calc(List<TestItem2> items, TestItem2 trainItem) throws IllegalArgumentException, IllegalAccessException {//利用反射机制获取某一条件的条目数量Class<?> cls = TestItem2.class;Field[] fs = cls.getDeclaredFields();double[] resSim = {1.0,1.0};//计算连续属性的贝叶斯Map<String,Double[]> resMap = calcLianxuVar(items,trainItem);for (Field f:fs) {if (f.getType().getName().contains("Double")|| f.getType().getName().contains("Integer")) {for (int i = 0; i < resSim.length;i++)resSim[i] *= resMap.get(f.getName())[i];}}System.out.println(Arrays.toString(resSim));int totalCount[] = {0,0}; //0-好瓜,1-坏瓜//计算其他离散属性的项集数量//计算离散数据当前分类的总数for (TestItem2 item: items) {boolean goodRes = item.isGood();if (goodRes) {totalCount[0]++;} else {totalCount[1]++;}}System.out.println(Arrays.toString(totalCount));//计算离散数据不同分类的数量Map<String,Double[]> res = new ConcurrentHashMap<>();for(TestItem2 item: items) {		for(Field f:fs) {f.setAccessible(true);Object val = f.get(item);if (val instanceof String) {String str = f.getName() + "_" + String.valueOf(val);boolean goodRes = item.isGood();if (res.get(str) == null) {if (goodRes) {res.put(str, new Double[]{1.0,0.0});} else {res.put(str, new Double[]{0.0,1.0});}} else {Double[] arr = res.get(str);if (goodRes) {arr[0] = arr[0] + 1;} else {arr[1] = arr[1] + 1;}res.put(str,arr);}}}}//进行当前样本的匹配度计算for (int i = 0; i < 2; i++) {for (Field f:fs) {f.setAccessible(true);Object val = f.get(trainItem);//求分类数量List<String> typeList = new ArrayList<>();for (String key: res.keySet()) {if (key.contains(f.getName()) && !typeList.contains(key)) {typeList.add(key);}}if (val instanceof String) {String str = f.getName() + "_" + String.valueOf(val);//使用拉普拉斯修正,调整值为0的数据resSim[i] *= (res.get(str)[i] + 1)/ ((totalCount[i] + typeList.size()) * 1.0);}		}}return resSim[0] >= resSim[1] ? true:false;}/*** 计算连续属性的概率密度函数(正态分布)* @param items* @param trainItem* @return* @throws IllegalAccessException * @throws IllegalArgumentException */private static Map<String,Double[]> calcLianxuVar(List<TestItem2> items, TestItem2 trainItem) throws IllegalArgumentException, IllegalAccessException {//计算均值和方差,只计算一次Double avg[],fangcha[],counter[];//0-好瓜,1-坏瓜Map<String,Double[]> avgMap = new ConcurrentHashMap<>();Map<String,Double[]> resMap = new ConcurrentHashMap<>();//训练模型//计算平均值Class<?> cls = TestItem2.class;Field[] fs = cls.getDeclaredFields();for (Field f: fs) {if (!(f.getType().getName().contains("Double")|| f.getType().getName().contains("Integer"))){continue;}//重新分配内存avg = new Double[2];counter = new Double[2];for (int i = 0; i < 2;i++) {avg[i] = 0.0;counter[i] = 0.0;}for (TestItem2 item: items) {f.setAccessible(true);boolean goodRes = item.isGood();if (goodRes) {avg[0] += (Double)f.get(item);counter[0]++;} else {avg[1] += (Double)f.get(item);counter[1]++;}}for (int i = 0;i < 2; i++) {avg[i] = avg[i] / counter[i];}avgMap.put(f.getName(), avg);}//计算方差for (Field f: fs) {if (!(f.getType().getName().contains("Double")|| f.getType().getName().contains("Integer"))){continue;}//重新分配内存fangcha = new Double[2];counter = new Double[2];for (int i = 0; i < 2;i++) {fangcha[i] = 0.0;counter[i] = 0.0;}for (TestItem2 item: items) {f.setAccessible(true);boolean goodRes = item.isGood();if (goodRes) {fangcha[0] +=Math.pow(((Double)f.get(item) - avgMap.get(f.getName())[0]), 2);counter[0]++;} else {fangcha[1] +=Math.pow(((Double)f.get(item) - avgMap.get(f.getName())[1]), 2);counter[1]++;}}for (int i =0;i < 2;i++) {fangcha[i] = fangcha[i] / ((counter[i] - 1) * 1.0);}resMap.put(f.getName(), fangcha);}Field[] fields = trainItem.getClass().getDeclaredFields();for(Map.Entry<String, Double[]> set:resMap.entrySet()) {for (Field f: fields) {f.setAccessible(true);if (f.getName().equalsIgnoreCase(set.getKey())) {Double val = (Double) f.get(trainItem);Double[] res = set.getValue();for (int i = 0; i < res.length;i++) {res[i] = 1/((Math.sqrt(2 * Math.PI) * Math.sqrt(set.getValue()[i])))* Math.exp(-1 * Math.pow((val - avgMap.get(set.getKey())[i]),2) / (2 * set.getValue()[i] * 1.0));}resMap.put(f.getName(), res);}}}return resMap;}public static void main(String[] args) {TestItem2 item1 = new TestItem2();item1.setColor("青绿");item1.setRoot("蜷缩");item1.setSound("浊响");item1.setWenli("清晰");item1.setQibu("凹陷");item1.setTouch("硬滑");item1.setDensity(0.697);item1.setSugerRate(0.46);item1.setGood(true);list.add(item1);calc(item1);}}

TestItem 类

package beiyesi;import java.io.Serializable;/*** 好瓜坏瓜* @author zygswo**/
public class TestItem2 implements Serializable{@Overridepublic String toString() {return "TestItem2 [color=" + color + ", root=" + root + ", sound=" + sound + ", wenli=" + wenli+ ", qibu=" + qibu + ", touch=" + touch + ", density=" + density + ", sugerRate=" + sugerRate+ ", isGood=" + isGood + "]";}private static final long serialVersionUID = 1L;public String getRootStyle() {return color;}public void setColor(String color) {this.color = color;}public String getRoot() {return root;}public void setRoot(String root) {this.root = root;}public String getSound() {return sound;}public void setSound(String sound) {this.sound = sound;}public String getWenli() {return wenli;}public void setWenli(String wenli) {this.wenli = wenli;}public String getQibu() {return qibu;}public void setQibu(String qibu) {this.qibu = qibu;}public String getTouch() {return touch;}public void setTouch(String touch) {this.touch = touch;}public Double getDensity() {return density;}public void setDensity(double density) {this.density = density;}public Double getSugerRate() {return sugerRate;}public void setSugerRate(double sugerRate) {this.sugerRate = sugerRate;}public String getColor() {return color;}public boolean isGood() {return isGood;}public void setGood(boolean isGood) {this.isGood = isGood;}/*** 色泽*/private String color;/*** 根蒂*/private String root;/*** 敲声*/private String sound;/*** 纹理*/private String wenli;/*** 脐部*/private String qibu;/*** 触感*/private String touch;/*** 密度*/private Double density;/*** 含糖量*/private Double sugerRate;/*** 是否好瓜*/private boolean isGood;
}

引用

朴素贝叶斯算法 https://www.jianshu.com/p/a4ddf754357b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio 报错:AVD Pixel_3a_API_30_x86 is already running

在我的Android Studio和虚拟机运行时&#xff0c;我的电脑不小心关机了&#xff0c;在启动后再次打开Android Studio并运行虚拟机时发现报错。 Error while waiting for device: AVD Pixel_3a_API_30_x86 is already running. If that is not the case, delete the files at C…

c++设计模式之桥接模式(拼接组合)

桥接模式&#xff1a;就是进行拼接组装 应用举例&#xff1a; 1.定义了形状&#xff0c;抽象形状接口&#xff0c;圆&#xff0c;矩形 2.定义了颜色&#xff0c;抽象颜色接口&#xff0c;红色&#xff0c;蓝色 3&#xff0c;怎么桥接&#xff0c;抽象具体形状和具体颜色的组合…

应用部署tomcat的三种方式

由于一直在用springboot框架&#xff0c;集成了tomcat&#xff0c;快忘记如何单独部署tomcat了&#xff0c;以下&#xff0c;记录一下&#xff1a; 部署tomcat有三种方式&#xff1a; 一、方式一&#xff1a;将war包丢进webapps 这是最简单粗暴的方式&#xff1a;将web工程打…

C#基础|对象属性Property基础使用,业务特性

哈喽&#xff0c;你好&#xff0c;我是雷工。 探究OOP中属性的奥秘 认识类的属性&#xff08;Property&#xff09; 01 属性的使用 作用&#xff1a;在面向对象&#xff08;OOP&#xff09;中主要用来封装数据。 要求&#xff1a;一般采用Pascal命名法&#xff08;首字母要…

UDS的3字节故障码

在UDS的规范下面&#xff0c;使用19服务去读取故障码&#xff0c;会发现读到市面上各种车企的各种ECU中的所有的故障码读出来都是3个字节。这与前面的五位故障码占2个字节不符&#xff0c;其实读出来是3个字节就是UDS中制定的规范。 如今车企中主要采用的是三个字节的故障码。…

【北京迅为】《iTOP-3588开发板系统编程手册》-第19章 V4L2摄像头应用编程

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

vben admin Table 实现表格列宽自由拖拽

更改BasicTable.vue文件 Table添加 resize-column“resizeColumn” 添加并 return resizeColumn const resizeColumn (w, col) > { setCacheColumnsByField(col.dataIndex, { width: w }); }; 在column中添加 resizable: true,

linux下编译c++程序报错“undefined reference to `std::allocator<char>::allocator()‘”

问题 linux下编译c程序报错“undefined reference to std::allocator::allocator()”。 原因 找不到c标准库文件。 解决办法 开始尝试给gcc指令添加-L和-l选项指定库路径和库文件名&#xff0c;但是一直不成功&#xff0c;后来把gcc改为g就可以了。

Rust - 引用和借用

上一篇章末尾提到&#xff0c;如果仅仅支持通过转移所有权的方式获取一个值&#xff0c;那会让程序变得复杂。 Rust 能否像其它编程语言一样&#xff0c;使用某个变量的指针或者引用呢&#xff1f;答案是可以。 Rust 通过 借用(Borrowing) 这个行为来达成上述的目的&#xff0…

李沐60_机器翻译数据集——自学笔记

!pip install d2limport os import torch from d2l import torch as d2l下载和预处理数据集 在这个将英语翻译成法语的机器翻译问题中&#xff0c; 英语是源语言&#xff08;source language&#xff09;&#xff0c; 法语是目标语言&#xff08;target language&#xff09;。…

【活动邀请·成都】成都 UG 生成式 AI 工作坊:AI 原生应用的探索与创新!

文章目录 前言一、活动介绍二、报名预约方式三、活动安排四、活动福利五、讲师介绍5.1、陈琪——《如何安全高效地构建生成式 AI 应用》5.2、刘文溢——《AIGC 的产业变革》5.3、胡荣亮——《生成式 AI 在企业应用与实践》5.4、陈明栋——《激发您的灵感&#xff0c;基于生成式…

Swing用法的简单展示

1.简单的登陆界面示例 import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;public class Main extends JFrame {private JTextField usernameField;private JPasswordField passwordField;public Main() {setTitle("登陆界…

第26天:安全开发-PHP应用模版引用Smarty渲染MVC模型数据联动RCE安全

第二十六天 一、PHP新闻显示-数据库操作读取显示 1.新闻列表 数据库创建新闻存储代码连接数据库读取页面进行自定义显示 二、PHP模版引用-自写模版&Smarty渲染 1.自写模版引用 页面显示样式编排显示数据插入页面引用模版调用触发 2.Smarty模版引用 1.下载&#xff1a…

信创传输软件,如何进行国产化替代?

信创产业&#xff0c;即信息技术应用创新产业&#xff0c;它与“863 计划”“973 计划”“核高基” 一脉相承&#xff0c;是我国 IT 产业发展升级采取的长期计划。网络安全事件频发后&#xff0c;中国要确保 IT 相关设施的全部环节国产化&#xff0c;任何不能保证自主可控的环节…

服务器(AIX、Linux、UNIX)性能监视器工具【nmon】使用介绍

目录 ■nmon简介 1.安装 2.使用简介 3.使用&#xff08;具体使用的例子【CPU】【内存】&#xff09; 4.采集数据 5.查看log&#xff08;根据结果&#xff0c;生成报表&#xff09; 6.分析结果 ■nmon简介 nmon&#xff08;"Nigels performance Monitor"&…

终于有人说明白了session、cookie和token的区别

一、首先介绍一下名词&#xff1a;Session、cookie、token&#xff0c;如下&#xff1a; 1.Session会话&#xff1a;客户端A访问服务器&#xff0c;服务器存储A的数据value&#xff0c;把key返回给客户端A&#xff0c;客户端A下次带着key&#xff08;session ID&#xff09;来…

一文浅谈FRTC8563时钟芯片

FRTC8563是NYFEA徕飞公司推出的一款实时时钟芯片&#xff0c;采用SOP-8封装形式。这种封装形式具有体积小、引脚间距小、便于集成等特点&#xff0c;使得FRTC8563能够方便地应用于各种电子设备中。 FRTC8563芯片基于32.768kHz的晶体振荡器工作&#xff0c;这种频率的晶体振荡器…

JavaSE——程序逻辑控制

1. 顺序结构 顺序结构 比较简单&#xff0c;按照代码书写的顺序一行一行执行。 例如&#xff1a; public static void main(String[] args) {System.out.println(111);System.out.println(222);System.out.println(333);} 运行结果如下&#xff1a; 如果调整代码的书写顺序 , …

(ICML-2021)从自然语言监督中学习可迁移的视觉模型

从自然语言监督中学习可迁移的视觉模型 Title&#xff1a;Learning Transferable Visual Models From Natural Language Supervision paper是OpenAI发表在ICML 21的工作 paper链接 Abstract SOTA计算机视觉系统经过训练可以预测一组固定的预定目标类别。这种受限的监督形式限制…

服务器基本故障和排查方法

前言 服务器运维工作中遇到的问题形形色色&#xff0c;无论何种故障&#xff0c;都需要结合具体情况&#xff0c;预防为主的思想&#xff0c;熟悉各种工具和技术手段&#xff0c;养成良好的日志分析习惯&#xff0c;同时建立完善的应急预案和备份恢复策略&#xff0c;才能有效…