package BP;
import java.io.File;
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.Scanner;
import java.util.Vector;
public class BpDeepTest {
//存储从文件中读取的原始数据
public static Vector<String> indata = new Vector<String>();
//存储预处理和归一化后的训练集
public static Vector<double[]> data = new Vector<double[]>();
static double[] max = new double[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
static double[] min = new double[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
static double[] weigth = new double[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
//加载测试的数据文件
public static boolean loadData(String url) {
try {
Scanner in = new Scanner(new File(url));//读入文件
while (in.hasNextLine()) {
String str = in.nextLine();//将文件的每一行存到str的临时变量中
indata.add(str);//将每一个样本点的数据追加到Vector 中
}
return true;
} catch (Exception e) { //如果出错返回false
return false;
}
}
public static void pretreatment(Vector<String> indata) { //数据预处理,将原始数据中的每一个属性值提取出来并进行归一化存放到Vector<double[]> data中
Vector<double[]> temdata = new Vector<double[]>();
int i = 1;
String t;
while (i < indata.size()) {//取出indata中的每一行值
double[] tem = new double[14];
t = indata.get(i);
String[] sourceStrArray = t.split(",", 16);//使用字符串分割函数提取出各属性值
for (int j = 0; j < 13; j++) {
tem[j] = Double.parseDouble(sourceStrArray[j + 2]);
//将每一个的样本的各属性值类型转换后依次存入到double[]数组中
if (tem[j] > max[j])
max[j] = tem[j];
if (tem[j] < min[j])
min[j] = tem[j];
}
switch (sourceStrArray[12]) {
case "Very High": {
tem[13] = 1;
break;
}
case "High": {
tem[13] = 2;
break;
}
case "Moderate": {
tem[13] = 3;
break;
}
case "Low": {
tem[13] = 4;
break;
}
case "Very low": {
tem[13] = 5;
break;
}
default:
break;
}
temdata.add(tem);//将每一个样本加入到temdata中
i++;
}
/*******以下部分对数据进行归一化处理**********/
for (int r = 0; r < max.length; r++) {
weigth[r] = max[r] - min[r];
}
for (int r = 0; r < temdata.size(); r++) {
double[] t1 = temdata.get(r);
for (int j = 0; j < t1.length - 1; j++) {
t1[j] = t1[j] / weigth[j];
}
data.add(t1);
}
}
public static String Show_air_quality(double[] result) {//根据结果返回空气质量
String rt = "";
int NO = 0;
double max = 0;
for (int i = 0; i < result.length; i++) {
if (result[i] >= max) {
max = result[i];
NO = i;
}
}
switch (NO) {
case 0: {
rt = "Very high";
break;
}
case 1: {
rt = "High";
break;
}
case 2: {
rt = "Moderate";
break;
}
case 3: {
rt = "Low";
break;
}
case 4: {
rt = "Very low";
break;
}
default:
break;
}
return rt;
}
public static void main(String[] args) {
long startTime = System.currentTimeMillis();//或得程序开始运行时间
loadData("AirQualityUCI.data");//载入训练数据
pretreatment(indata);//预处理数据
double[][] train_data = new double[data.size()][data.get(0).length - 1];//构建训练样本集
int r = 0;
while (r < data.size()) {
double[] tem = data.get(r);
for (int j = 0; j < tem.length - 1; j++) {
train_data[r][j] = tem[j];
}
r++;
}
double[][] target = new double[data.size()][5];//构建训练样本集的结果集
r = 0;
while (r < data.size()) {
int t = (int) data.get(r)[13];
switch (t) {
case 1: {
target[r] = new double[]{1.0, 0.0, 0.0, 0.0, 0.0};
break;
}
case 2: {
target[r] = new double[]{0.0, 1.0, 0.0, 0.0, 0.0};
break;
}
case 3: {
target[r] = new double[]{0.0, 0.0, 1.0, 0.0, 0.0};
break;
}
case 4: {
target[r] = new double[]{0.0, 0.0, 0.0, 1.0, 0.0};
break;
}
case 5: {
target[r] = new double[]{0.0, 0.0, 0.0, 0.0, 1.0};
break;
}
default:
break;
}
r++;
}
BP bp1 = new BP(13, 13, 5);//新建一个神经网络
for (int s = 0; s < 10000; s++) {//循环训练10000次
for (int i = 0; i < data.size(); i++) { //训练
bp1.train(train_data[i], target[i]);
}
int correct = 0;
for (int j = 0; j < data.size(); j++) { //测试
double[] result = bp1.test(train_data[j]);
double max = 0;
int NO = 0;
for (int i = 0; i < result.length; i++) {
if (result[i] >= max) {
max = result[i];
NO = i;
}
}
if (target[j][NO] == 1.0) {
correct++;
}
else if(s==9999)//输出训练10000次后测试的错误结果
System.out.println("第"+(s+1)+"次训练后,第"+j+"号测试用例预测错误--------------");
}
double b=(correct * 1.0 / data.size()) * 100;//计算正确率
DecimalFormat df = new DecimalFormat( "0.00 ");//设置输出精度
System.out.println("第 " + (s+1) + " 次训练后,使用训练集检测的正确率为==" +df.format(b) + "%");
}
double[] x = new double[]{-200,883,-200,1.3,530,63,997,46,1102,617,13.7,68.2,1.0611};
System.out.print("使用测试用例" + Arrays.toString(x) + " 根据神经网络计算预计空气质量为:");
for(int i=0;i<x.length;i++)
x[i]=x[i]/weigth[i];//对数据归一化
double[] result = bp1.test(x);
System.out.println(Show_air_quality(result));
System.out.println("程序运行时间为:" + (System.currentTimeMillis() - startTime) * 1.0 / 1000 + " s");
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于Python实现北京PM2.5浓度的预测分析项目源码(期末大作业).zip个人98分期末大作业项目,代码完整下载可用。主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。包含全部项目源码、该项目可以直接使用、项目都经过严格调试,下载即用确保可以运行! 基于Python实现北京PM2.5浓度的预测分析项目源码(期末大作业).zip个人98分期末大作业项目,代码完整下载可用。主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。包含全部项目源码、该项目可以直接使用、项目都经过严格调试,下载即用确保可以运行! 基于Python实现北京PM2.5浓度的预测分析项目源码(期末大作业).zip个人98分期末大作业项目,代码完整下载可用。主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。包含全部项目源码、该项目可以直接使用、项目都经过严格调试,下载即用确保可以运行! 基于Python实现北京PM2.5浓度的预测分析项目源码(期末大作业).zip个人98分期末大作业项目,代码完整下载可用。
资源推荐
资源详情
资源评论
收起资源包目录
基于Python实现北京PM2.5浓度的预测分析.zip (77个子文件)
pm-master
.classpath 628B
.settings
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.jdt.core.prefs 387B
org.eclipse.core.resources.prefs 170B
.jsdtscope 488B
org.eclipse.wst.common.component 441B
org.eclipse.wst.common.project.facet.core.xml 245B
org.eclipse.wst.jsdt.ui.superType.container 49B
.mymetadata 278B
src
MLR
Result.java 347B
MLR.java 5KB
servlet
ServletQueryAqi.java 1KB
ServletQueryAllData.java 1KB
ServletQueryDay.java 1019B
dao
DataDaoImpl.java 3KB
DataDao.java 277B
Test.java 468B
BP
BpDeepTest.java 7KB
BP.java 7KB
entity
Data.java 2KB
util
DBUtil.java 3KB
pm.sql 825KB
.externalToolBuilders
org.eclipse.wst.jsdt.core.javascriptValidator (1).launch 541B
WebRoot
WEB-INF
classes
MLR
Result.class 766B
MLR.class 5KB
servlet
ServletQueryDay.class 2KB
ServletQueryAqi.class 2KB
ServletQueryAllData.class 2KB
dao
Test.class 1006B
DataDao.class 417B
DataDaoImpl.class 3KB
BP
BpDeepTest.class 1KB
BP.class 4KB
entity
Data.class 3KB
util
DBUtil.class 3KB
web.xml 1KB
index.jsp 13KB
js
jquery-1.8.3.min.js 91KB
beijing.js 22KB
echarts.js 2.76MB
china.js 60KB
calendar.js 10KB
beijing.json 21KB
jquery.min.js 94KB
rank.jsp 25KB
aboutUs.jsp 9KB
css
main.css 4KB
graph.css 423B
calendar.css 1KB
fanghu.css 2KB
table.css 2KB
about.css 4KB
index.css 4KB
history_data.jsp 17KB
images
w6.png 363KB
sports1.png 9.18MB
eyes.png 2.1MB
you.png 411B
w2.png 2.81MB
nose.png 25KB
kouzhao.png 19KB
logo.png 5KB
zuo.png 404B
shanyao.png 31KB
bg.png 515KB
w4.png 1.43MB
ill.png 636KB
grade.png 959B
w3.png 2.72MB
w5.png 40KB
sports.png 3.96MB
plant.png 2.14MB
w1.png 515KB
rest.png 2.92MB
META-INF
MANIFEST.MF 36B
fanghu.jsp 9KB
.project 2KB
共 77 条
- 1
资源评论
程序员张小妍
- 粉丝: 1w+
- 资源: 3605
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 比libevent/libuv/asio更易用的国产网络库,用来开发 TCP/UDP/SSL/HTTP/WebSocket/MQTT 客户端/服务端
- 3-12.OpenCV基础.pptx
- 回文串:特殊对称字符串及其在计算机科学和多领域的广泛应用与研究进展
- 0软件工程-2024-2025-1实验要求.doc
- 帝可得智能售货机运营系统的体系设计框架 - 构建高效运营的技术解决方案
- ch-入口-通道-皮带程序
- pngquant压缩包
- 1949-2022中国人口历史数据.zip
- 软件工程各种图表.7z
- uniad部署.zipvsfdsfrr
- SoapUI-5.3.0免安装.zip
- 遥感目标检测(包含27种类型的遥感地物目标)
- 网络攻防原理与技术-提交的报告.7z
- NetWork-RSA.7z
- 西门子200SMART经程序,西门子经典参考程序,西门子程序模板,大概有50多个,都有中文注释的,覆盖内容广,学习用或者参考和借鉴程序把这些程序琢磨好,你也可以独当一面 以下展示部分: 200SMAR
- HL13:变频器资料:欧瑞变频器方案,资料齐全,原理图,pcb,源代码,文档 非常适合学习
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功