R平方算法实现,箭头导出图片不显示问题处理
parent
9e9b617c7a
commit
d77f330713
Binary file not shown.
After Width: | Height: | Size: 248 B |
|
@ -136,6 +136,7 @@
|
||||||
import { productTypeMap } from "@/lib/variateMap";
|
import { productTypeMap } from "@/lib/variateMap";
|
||||||
import { truthFunVal, productSubTypeVal } from "@/lib/contract";
|
import { truthFunVal, productSubTypeVal } from "@/lib/contract";
|
||||||
import * as turf from "@turf/turf";
|
import * as turf from "@turf/turf";
|
||||||
|
import arrow from "@/assets/images/arrow.png"
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
realRes: {
|
realRes: {
|
||||||
|
@ -174,7 +175,7 @@ export default {
|
||||||
tDatas: null,
|
tDatas: null,
|
||||||
midValue: 10,
|
midValue: 10,
|
||||||
erExpression: null,
|
erExpression: null,
|
||||||
erR2: "r² = 0.037207",
|
erR2: "",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
|
@ -313,13 +314,31 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
calculateR2(y, yHat) {
|
||||||
|
// y:真实值 yhat:预测值
|
||||||
|
// 计算观测值的平均值
|
||||||
|
const meanY = y.reduce((acc, val) => acc + val, 0) / y.length;
|
||||||
|
// 计算回归平方和(SSR)
|
||||||
|
const totalSumOfSquares = yHat.map(val => Math.pow(val - meanY, 2)).reduce((acc, val) => acc + val, 0);
|
||||||
|
// 计算残差平方和(SSE)
|
||||||
|
const residualSum = y.map((val, index) => Math.pow(val - yHat[index], 2)).reduce((acc, val) => acc + val, 0);
|
||||||
|
// 计算回归平方和(SST)
|
||||||
|
const residualSumOfSquares = totalSumOfSquares + residualSum;
|
||||||
|
// 计算 R2 决定系数
|
||||||
|
const rSquared = 1 - (residualSum / residualSumOfSquares);
|
||||||
|
return rSquared;
|
||||||
|
},
|
||||||
drawPie(errorVala) {
|
drawPie(errorVala) {
|
||||||
let data = [];
|
let data = [];
|
||||||
let xArr = [];
|
let xArr = [];
|
||||||
|
const observedValues = [];
|
||||||
|
const predictedValues = [];
|
||||||
for (let i in errorVala) {
|
for (let i in errorVala) {
|
||||||
const a = [errorVala[i].cre_imageValue, errorVala[i].cre_deviation];
|
const a = [errorVala[i].cre_imageValue, errorVala[i].cre_deviation];
|
||||||
xArr.push(errorVala[i].cre_imageValue);
|
xArr.push(errorVala[i].cre_imageValue);
|
||||||
data.push(a);
|
data.push(a);
|
||||||
|
observedValues.push(errorVala[i].cre_deviation);
|
||||||
|
predictedValues.push(errorVala[i].cre_imageValue);
|
||||||
}
|
}
|
||||||
// const x_limit = Math.abs(Math.max(...xArr) / xArr.length);
|
// const x_limit = Math.abs(Math.max(...xArr) / xArr.length);
|
||||||
//多项式回归
|
//多项式回归
|
||||||
|
@ -328,6 +347,8 @@ export default {
|
||||||
}).reduce((acc, curr) => acc + curr, 0);
|
}).reduce((acc, curr) => acc + curr, 0);
|
||||||
let rmseValue = "RMSE = "+ Math.sqrt(wcpf/data.length);
|
let rmseValue = "RMSE = "+ Math.sqrt(wcpf/data.length);
|
||||||
let myRegression = this.echartRegression("polynomial", data, 1);
|
let myRegression = this.echartRegression("polynomial", data, 1);
|
||||||
|
// 计算 R2 决定系数
|
||||||
|
this.erR2 = "r² = " + this.calculateR2(observedValues, predictedValues);
|
||||||
var option = {
|
var option = {
|
||||||
title: {
|
title: {
|
||||||
text: this.pdSubTypeName + "误差结果图",
|
text: this.pdSubTypeName + "误差结果图",
|
||||||
|
@ -416,10 +437,16 @@ export default {
|
||||||
{
|
{
|
||||||
name: "r2",
|
name: "r2",
|
||||||
icon: "circle",
|
icon: "circle",
|
||||||
|
itemStyle: {
|
||||||
|
color:"#FFF"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name:"RMSE",
|
name:"RMSE",
|
||||||
icon: "circle",
|
icon: "circle",
|
||||||
|
itemStyle: {
|
||||||
|
color:"#FFF"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
formatter: (name) => {
|
formatter: (name) => {
|
||||||
|
@ -600,7 +627,8 @@ export default {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// symbol: "image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAjVJREFUeF7tmM1JAwEYBb90Yg1WYGeWYhd69OTVEjxagldlJeAfibtkIBOYgARk8/ZlJm/jupseKgI7VZvKTEJkH4KEJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREaAq3M9M8+nxrWQUwl+vf59Zl5m5mFm7vfPy+82PRKyCdfRg3/Df9tLWQQtP69rTpWQNZTWHfPfGp6+CTp4aVuE3M7MzbpzdtQRAlsYHry0LUIeE3LWD9qPS1tCzuri8+R/hNzNzNX5e118A+ySdfEkJG8A+1KXvJ+Lr9GfvTKF3RjKhPSvE5kQpE536ghGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLuQDLNIwmfEn5ZUAAAAASUVORK5CYII=",
|
// symbol: "image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAjVJREFUeF7tmM1JAwEYBb90Yg1WYGeWYhd69OTVEjxagldlJeAfibtkIBOYgARk8/ZlJm/jupseKgI7VZvKTEJkH4KEJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREZAVqeFJERGQFanhSRERkBWp4UkREaAq3M9M8+nxrWQUwl+vf59Zl5m5mFm7vfPy+82PRKyCdfRg3/Df9tLWQQtP69rTpWQNZTWHfPfGp6+CTp4aVuE3M7MzbpzdtQRAlsYHry0LUIeE3LWD9qPS1tCzuri8+R/hNzNzNX5e118A+ySdfEkJG8A+1KXvJ+Lr9GfvTKF3RjKhPSvE5kQpE536ghGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLiQhHEskKSEIRi4kIRxLJCkhCEYuJCEcSyQpIQhGLuQDLNIwmfEn5ZUAAAAASUVORK5CYII=",
|
||||||
symbol: "image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAAAv0lEQVR4nO3UsUmEQRCA0U801cASxECwAUOrMLEly7CGM7OAM/ZSCxBzA0ERLjqQQ3G5X//3YLPdYWZ2dgMAAAAAAAAAAIBd25/hDVxUR9Xzdw/OsVmn1bK6qk6qt+ppAnlN0mX1vrFeqtvqujr+Kum9CRe1HBT3sDrbsue+WlR31WpQHr9q8/Z3tR6rm8/CDibcrIdBcf/lZI3y4z9rypM12mo9OYv1JG01x2a9Vudzf14AAAAAAAAAAAD8RdUHTdhBNENzGoYAAAAASUVORK5CYII=",
|
// symbol: "image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAAAv0lEQVR4nO3UsUmEQRCA0U801cASxECwAUOrMLEly7CGM7OAM/ZSCxBzA0ERLjqQQ3G5X//3YLPdYWZ2dgMAAAAAAAAAAIBd25/hDVxUR9Xzdw/OsVmn1bK6qk6qt+ppAnlN0mX1vrFeqtvqujr+Kum9CRe1HBT3sDrbsue+WlR31WpQHr9q8/Z3tR6rm8/CDibcrIdBcf/lZI3y4z9rypM12mo9OYv1JG01x2a9Vudzf14AAAAAAAAAAAD8RdUHTdhBNENzGoYAAAAASUVORK5CYII=",
|
||||||
|
symbol:"image://" + arrow,
|
||||||
symbolRotate: (number, params) => {
|
symbolRotate: (number, params) => {
|
||||||
console.log(number, params);
|
console.log(number, params);
|
||||||
return bearingArr[params.dataIndex];
|
return bearingArr[params.dataIndex];
|
||||||
|
|
|
@ -35,7 +35,8 @@ module.exports = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[process.env.VUE_APP_REALITY_API]: {
|
[process.env.VUE_APP_REALITY_API]: {
|
||||||
target: "https://124.16.188.131:28092/microwave",
|
target: "http://192.168.88.199:18092/microwave",
|
||||||
|
// target: "https://124.16.188.131:28092/microwave",
|
||||||
// target: "http://192.168.1.227:18092/microwave",
|
// target: "http://192.168.1.227:18092/microwave",
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
pathRewrite: {
|
pathRewrite: {
|
||||||
|
@ -43,7 +44,8 @@ module.exports = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[process.env.VUE_APP_FILE_API]: {
|
[process.env.VUE_APP_FILE_API]: {
|
||||||
target: "https://124.16.188.131:28093/file",
|
target: "http://192.168.88.199:18093/file",
|
||||||
|
// target: "https://124.16.188.131:28093/file",
|
||||||
// target: "http://192.168.1.227:18093/file",
|
// target: "http://192.168.1.227:18093/file",
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
pathRewrite: {
|
pathRewrite: {
|
||||||
|
|
Loading…
Reference in New Issue