评价算法(topsis熵权法)

news2024/11/15 19:52:22

评价算法

熵权法

img

上面箭头的一步用到了带权重的距离公式。

img

上面是某种求权重的方法,合理就行。

但是在使用熵权法的时候,一定要注意用的是规范化矩阵再用熵权法求权重。

规范化之前一定要判断每一列的性质

img

#熵权法:

import xlrd
import numpy as np

#读数据并求熵
path=u"D:\\LearningResource\\myLearningData\\hostital.xls"
hn,nc=1,1
#hn为表头行数,nc为表头列数
sheetname=u'Sheet1'

def readexcel(hn,nc):
    data = xlrd.open_workbook(path)
    table = data.sheet_by_name(sheetname)
    nrows = table.nrows
    data=[]
    for i in range(hn,nrows):
        data.append(table.row_values(i)[nc:])
    return np.array(data)

def entropy(data0):
    #返回每个样本的指数
    #样本数,指标个数
    n,m=np.shape(data0)
    #一行一个样本,一列一个指标
    #下面是归一化
    maxium=np.max(data0,axis=0)
    minium=np.min(data0,axis=0)
    data= (data0-minium)*1.0/(maxium-minium)
    ##计算第j项指标,第i个样本占该指标的比重
    sumzb=np.sum(data,axis=0)
    data=data/sumzb
    #对ln0处理
    a=data*1.0
    a[np.where(data==0)]=0.0001
#    #计算每个指标的熵
    e=(-1.0/np.log(n))*np.sum(data*np.log(a),axis=0)
    print(e)
#    #计算权重
    w=(1-e)/np.sum(1-e)
    recodes=np.sum(data0*w,axis=1)
    return recodes

data=readexcel(hn,nc)
grades=entropy(data)
print(grades)

img

img

Topsis法

TOPSIS(逼近理想解)算法原理详解与代码实现 - 知乎 (zhihu.com)

(98条消息) TOPSIS优劣解距离法–代码部分_丰丰小白的博客-CSDN博客

*个人理解:针对存在多项指标,多个方案的方案评价分析方法,也就是根据已存在的一份数据,判断数据中各个方案的优劣。中心思想是首先确定各项指标的最优理想值(正理想值)和最劣理想值(负理想解),所谓正理想值是一设想的最好值(方案),它的的各个属性值都达到各候选方案中最好的值,而负理想解是另一设想的最坏的值(方案),然后求出各个方案与正理想值和负理想值之间的加权欧氏距离,由此得出各方案与最优方案的接近程度,作为评价方案的优劣标准,最后得到各个方案的优劣值。*

一、topsis算法

1.1 TOPSIS算法的原理

TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution)可翻译为逼近理想解排序法,国内常简称为优劣解距离法
TOPSIS 法是一种常用的综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。

为了对众多方案给出一个排序,在给出所有方案之后,可以根据这些数据,构造出一个所有方案组成的系统中的理想最优解和最劣解。而TOPSIS的想法就是,通过一定的计算,评估方案系统中任何一个方案距离理想最优解和最劣解的综合距离。如果一个方案距离理想最优解越近,距离最劣解越远,我们就有理由认为这个方案更好。那理想最优解和最劣解又是什么呢?很简单,理想最优解就是该理想最优方案的各指标值都取到系统中评价指标的最优值,最劣解就是该理想最劣方案的各指标值都取到系统中评价指标的最劣值。

理想最优解中的数据都是各方案中的数据,而不要选择方案中没有的数据,理想最劣解同理。

如何衡量某一个方案与理想最优解和最劣解的综合距离呢?

TOPSIS基本思想是用下面这个表达式进行衡量:

在这里插入图片描述

可以发现,如果方案取到了理想最优解,其表达式取值为1;如果方案取到了理想最劣解,其表达式取值为0。我们便可以用这个表达式来衡量系统中某一个方案距离理想最优解和最劣解的综合距离,也直接用它给方案进行打分。

当然这个公式只是一个基本的思路,实际上,为了更准确与合理,会对该公式进行优化。

1.2 TOPSIS算法的实现

在了解TOPSIS算法的基本思想后就是对相应参数的计算了,从上面的描述可以知道,除了要对该公式进行改进之外,因为涉及到数据之间的比较,还需要对方案数据进行处理,消除量纲以及范围太大带来的一系列问题。

二、数据预处理

2.1 数据正向化处理

在处理数据时,有些指标的数据越大越好,有些则是越小越好,有些又是中间某个值或者某段区间最好。我们可以对其进行“正向化处理”,使指标都可以像考试分数那样,越大越好。

将指标分为四类,如下表所示。

img

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、TOPSIS算法实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

五、TOPSIS算法示例

5.1 TOPSIS算法示例

对一个需要根据学生智商和情商进行排名的数据:原始数据矩阵如下

img

对其进行正向化:

img

对其进行标准化:

img

计算与最优解和最劣解的距离:

img

注:指标权重默认是相同的,我们之前使用熵权法对权重进行一定的处理,并将权重带入进行计算。

实际上这很可能并不具有合理性。实际上两种算法在提取信息方面都做到了同类数据相差越大越重要。

最后计算得分给出排名:

img

这个例子告诉我们,成绩很重要,但是情商更重要。小王虽然只考了60分,但也及格了,而且他从不与人争吵,所以我们可以给他一个最好的评价。

5.2 TOPSIS算法扩展

从上面计算各自与最优解和最劣解的距离时,我们看到,每一项指标的权重是一样的。

img

在实际问题中,不同的指标重要程度可能是不一样的。例如评奖学金的时候,成绩往往是最重要的,之后还有参与活动分,志愿服务分等等,他们的权重又低一点。因此,在实际的应用中,我们也可以给指标进行赋权,将权重放到计算距离的公式中。

img

考虑权重后,不同指标对最后的影响不一样,考虑权重的评价往往是实际生活中很常见的一种评价方式。

关于权重的选取也有不同的方法,比如层次分析法(主观给出)、熵权法等等。

注意:在这个地方请注意:不可以贸然使用熵权法,例如,在奖学金评定过程中,如果同学们的成绩以外的其他活动或者志愿服务分分布差异比较大,那使用熵权法就会导致这些指标的权重超过学习成绩,这不是我们希望看到的结果,所以这个时候采用主观赋权法:如层次分析法是更加合理的。

六、程序源码

TOPSIS.m程序

clear all
clc
%%  导入数据
% (1)在工作区右键,点击新建(Ctrl+N),输入变量名称为X
% (2)双击进入X,输入或拷贝数据到X
% (3)关掉这个窗口,点击X变量,右键另存为,保存为mat文件
% (4)注意,代码和数据要放在同一个目录下哦,且Matlab的当前文件夹也要是这个目录。
load data_water_quality.mat

%%  数据预处理_正向化
[n,m] = size(X);
disp(['共有' num2str(n) '个评价对象, ' num2str(m) '个评价指标']) 
Judge = input(['这' num2str(m) '个指标是否需要经过正向化处理,需要请输入1 ,不需要输入0:  ']);

if Judge == 1
    Position = input('请输入需要正向化处理的指标所在的列,例如[2,3,6]: '); %[2,3,4]
    disp('请输入需要处理的这些列的指标类型(1:极小型, 2:中间型, 3:区间型) ')
    Type = input('例如[1,3,2]:  '); %[2,1,3]
    % 注意,Position和Type是两个同维度的行向量
    for i = 1 : size(Position,2)%对每一列进行正向化处理
        X(:,Position(i)) = Positivization(X(:,Position(i)),Type(i),Position(i));
    % 第一个参数是要正向化处理的那一列向量 X(:,Position(i))
    % 第二个参数是对应的这一列的指标类型(1:极小型, 2:中间型, 3:区间型)
    % 第三个参数是告诉函数我们正在处理的是原始矩阵中的哪一列
    % 返回值返回正向化之后的指标
    end
    disp('正向化后的矩阵 X =  ')
    disp(X)
end

%% 数据预处理_标准化
Z = X ./ repmat(sum(X.*X) .^ 0.5, n, 1);
disp('标准化矩阵 Z = ')
disp(Z)

%% 指标权重赋值
disp("请输入是否需要增加权重向量,需要输入1,不需要输入0")
Judge = input('请输入是否需要增加权重: ');
if Judge == 1
    disp(['有多少个指标就输入多少个权重数(权重和为1),如[0.25,0.25,0.5]']);
    weigh = input(['请输入输入' num2str(m) '个权重: ']);
        if abs(sum(weigh) - 1)<0.000001 && size(weigh,1) == 1 && size(weigh,2) == m   % 这里要注意浮点数的运算是不精准的。
        else
            weigh = input('你输入的有误,请重新输入权重行向量: ');
        end
else
    weigh = ones(1,m) ./ m ; %如果不需要加权重就默认权重都相同,即都为1/m
end

%% 计算与最大值的距离和最小值的距离,并算出得分
D_P = sum([(Z - repmat(max(Z),n,1)) .^ 2 ] .* repmat(weigh,n,1) ,2) .^ 0.5;   % D+ 与最大值的距离向量
D_N = sum([(Z - repmat(min(Z),n,1)) .^ 2 ] .* repmat(weigh,n,1) ,2) .^ 0.5;   % D- 与最小值的距离向量
S = D_N ./ (D_P+D_N);    % 未归一化的得分
disp('最后的得分为:')
stand_S = S / sum(S)% 归一化的得分
[sorted_S,index] = sort(stand_S ,'descend')%对得分进行排序并返回原来的位置
plot(sorted_S,'r-o')
xmin=1;xmax = size(sorted_S,1);
ymin = 0;ymax = max(sorted_S)+min(sorted_S);
axis([xmin xmax ymin ymax]); % 设置坐标轴在指定的区间
grid on
xlabel('方案');ylabel('分数');%坐标轴表示对bai象标签
title('TOPSIS算法最终评分排序')

正向化处理函数Positivization.m程序

function [posit_x] = Positivization(x,type,i)
% 输入变量有三个:
% x:需要正向化处理的指标对应的原始列向量
% type: 指标的类型(1:极小型, 2:中间型, 3:区间型)
% i: 正在处理的是原始矩阵中的哪一列
% 输出变量posit_x表示:正向化后的列向量
    if type == 1  %极小型
        disp(['第' num2str(i) '列是极小型,正在正向化'] )
        posit_x = Min2Max(x);  %调用Min2Max函数来正向化
        disp(['第' num2str(i) '列极小型正向化处理完成'] )
        disp('~~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~~')
    elseif type == 2  %中间型
        disp(['第' num2str(i) '列是中间型'] )
        best = input('请输入最佳的那一个值(中间的那个值): ');
        posit_x = Mid2Max(x,best);
        disp(['第' num2str(i) '列中间型正向化处理完成'] )
        disp('~~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~~')
    elseif type == 3  %区间型
        disp(['第' num2str(i) '列是区间型'] )
        a = input('请输入区间的下界: ');
        b = input('请输入区间的上界: '); 
        posit_x = Inter2Max(x,a,b);
        disp(['第' num2str(i) '列区间型正向化处理完成'] )
        disp('~~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~~')
    else
        disp('没有这种类型的指标,请检查Type向量中是否有除了1、2、3之外的其他值')
    end
end

以下面这个例子为例:

img

首先导入数据,然后运行程序,结果如下:

img

关于运行后没有min2max,是因为没有定义极小、极大、中间型函数,具体代码在CSDN:

**TOPSIS优劣解距离法–代码部分_丰丰小白的博客-CSDN博客_优劣解距离法代码**

TOPSIS优劣解距离法–代码部分
下面要介绍的是TOPSIS的代码书写方法,TOPSIS总体分为三步:
1、矩阵正向化
2、正向化矩阵标准化
3、计算评分并归一化
下面根据这三步开始我们的代码编写:

第一步:导入数据
把数据复制到工作区,并将这个矩阵命名为x
① 在工作区右键,点击新建(ctrl+n),输入变量名称X
② 在Excel中复制数据,再回到X变量中粘贴数据
③ 右键X另存为,保存为mat文件,以后调用X只需要用load命令即可加载数据(这里我保存的mat文件命名为X.mat)
④ 代码和数据需要放在同一个目录下哦

第二步:判断是否需要正向化,并进行正向化

[n,m]=size(X);
disp(['共有num2str(n)'个评价对象'个评价对象'num2str(m)'个评价指标']
%用向量的方法拼接并输出字符串
Judge=input(['这'num2str(m)'个指标是否经过正向化处理,需要请输入1,不需要请输入0:']);
%使用input函数,来给Judge赋值
if Judge==1
	Position=input('请输入需要正向化处理的指标所在的列,例如第2、3、6三列需要处理,那么你输入[2,3,6]:');
	%使用input函数确定需要正向化处理的位置
	disp('请输入需要处理的这些列的标准类型(1:极小型,2:中间型,3:区间型)')
	Type=input('例如:第2列是极小型,第3列是区间型,第6列是中间型,就输入[1,3,2]:');
	%使用intput函数确定需要处理列的指标类型
	%需要注意的是Position和Type是相同维度的行向量
	for i=1:size(Position,2)%这里得出的是循环次数,也就是每一个需要正向化的列都做一次循环
		X(:,Position(i))=Positivization(X(:,Position(i)),Type(i),Position(i));
	%Positivization是我们自己定义的函数,其作用是进行正向化,一共接受3个参数
	%第一个参数就是要正向化处理的那一列向量X(:,Position(i))
	%第二个参数是对应的这一列的指标类型(1:极小型,2:中间型,3:区间型)
	%第三个参数是告诉函数我们正在处理的是原始矩阵中的哪一列
	%该函数有一个返回值,它返回正向化之后的指标那一列,我们可以直接给我们原始要处理的列向量进行赋值
	end
	disp('正向化后的矩阵X=')
	disp(X)
end


接下来开始定义我们的Positivization函数,函数不可以直接放在主函数中,和大多数语言不同,函数需要在matlab中单独定义一个m文件,并且函数文件需要和主函数放在同一个目录,也就是同一个文件夹当中。首先定义三种指标的转化函数:
极小型转化为极大型Min2Max

在这里插入图片描述

%function[输出变量]=函数名(输入变量)
%函数最后需要用end结尾
function[posit_x]=Min2Max(x)
	posit_x=max(x)-x;
end

在这里插入图片描述

function[posit_x]=Mid2Max(x,best)
	M=max(abs(x-best));
	posit_x=1-abs(x-best)/M;
end

在这里插入图片描述

function[posit_x]=Inter2Max(x,a,b)
	r_x=size(x,1);%表示列向量的行数(row of x),来找到循环的次数
	M=max([a-min(x),max(x)-b]);
	posit_x=zeros(r_x,1) %将posit_x初始化为一个全为0的列向量
	for i=1:r_x
		if x(i)<a
			posit_x(i)=1-(a-x(i)/M;
		elseif x(i)>b
			posit_x(i)=1-(x(i)-b)/M;
		else
			posit_x(i)=1;
		end
	end
end

接下来开始写Positivization函数:

%function[输出变量]=函数名(输入变量)
%函数最后需要用end结尾
%输出变量和输入变量可以有多个,中间用逗号隔开
function[posit_x]=Positivization(x,type,i)%这里定义函数参数,其中均为形参
%posit_x表示正向化后的列向量
%x表示需要正向化处理的指标对应的原始列向量
%type表示指标的类型(1:极小型,2:中间型,3:区间型)
%i表示正在处理的是原矩阵中的哪一列
	if type==1 %极小型
		disp(['第'num2str(i)'列是极小型,正在正向化'])
		posit_x=Min2Max(x);%调用Min2Max函数来进行正向化
		disp(['第'num2str(i)'列极小型正向化处理完毕'])
		disp('~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~')
	elseif type==2%中间型
		disp(['第'num2str(i)'列是中间型'])
		best=input('请输入最佳的值:');
		posit_x=Mid2Max(x,best);
		disp(['第'num2str(i)'列中间型正向化处理完毕'])
		disp('~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~')
	elseif type==3 %区间型
		disp(['第'num2str(i)'列是区间型'])
		a=input('请输入区间的上界');
		b=input('请输入区间的下界');
		posit_x=Inter2Max(x,a,b);
		disp(['第'num2str(i)'列区间型正向化处理完毕'])
		disp('~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~')
	end
end
	

第三步:对正向化后的矩阵进行标准化

Z=X./repmat(sum(X.*X).^0.5,n,1);
disp('标准化矩阵Z='disp(Z)

第四步:计算与最大值的距离和与最小值的距离,并计算出得分

D_P=sum([(Z-repmat(max(Z),n,1)).^2],2).^0.5;%D+与最大值的距离
D_N=sum([(Z-repmat(min(Z),n,1)).^2],2).^0.5;%D-与最小值的距离
S=D_N./(D_P+D_N);%未归一化的得分
disp('最后的得分为:')
stand_S=S/sum(S)
[sortde_s,index]=sort(stand_S,'descend')
%这里使用sort函数进行排序,sort函数默认升序排列,加入参数'descend'为降序排列
%返回值sortde_s为降序排列后的矩阵,index为排列后的序号。

python版一个综合练习题

现有一份关于各个河流的数据,其中oxygen表示水中含氧比例,该比例越大越好;PH表示水体的酸碱性,该值越接近7越好;bacteria表示水中细菌数量,该值越小越好;water plants表示水中水草数量,该值最好是介于[500,1000]。

img
import pandas as pd
path = 'C:UsersCaraDesktopwaterquality.xlsx'
rawdata = pd.read_excel(path)
#一、将所有指标正向化
#1.处理PH指标,它属于中间型指标,将其转化为极大型指标
#PH指标最优值为7
PHbest = 7
 
#(1)构造PH变量的中间变量M_PH
PH = list(rawdata['PH'])
lst1 = []
for i in range(0,len(PH)):
    d = abs(PH[i] - PHbest)
    lst1.append(d)
M_PH = max(lst1)
 
#(2)使用公式将PH指标转化为极大型指标,保留4位小数
PH_bar = [round(1-abs(i-PHbest)/M_PH,4) for i in PH]
 
#2.处理Bacteria指标,它属于极小型指标,将其转化为极大型指标
Bacteria = list(rawdata['Bacteria'])
#用 max-x的方法正向化
max_Bacteria = max(Bacteria)
Bacteria_bar = [max_Bacteria - i for i in Bacteria]
 
#3.处理WaterPlants指标,它属于区间型指标,将其转化为极大型指标
#最佳区间为[500,1000]
WP_a = 500
WP_b = 1000
#构造中间变量M_WP
WP = list(rawdata['WaterPlants'])
min_WP = min(WP)
max_WP = max(WP)
M_WP = max(WP_a - min_WP,max_WP - WP_b)
 
#根据转化公式,将WaterPlants指标转化为极大型指标
WP_bar = []
for i in range(0,len(WP)):
    if WP[i] >= WP_a and WP[i] <= WP_b:
        x = 1
    elif WP[i] < WP_a:
        x = 1 - (WP_a - WP[i])/M_WP
    else:
        x = 1 - (WP[i] -WP_b)/M_WP
    WP_bar.append(x)
 
 
#二、所有指标进行数据标准化处理
#1.Oxygen_bar指标标准化
import numpy as np
Oxygen_bar = list(rawdata['Oxygen'])
 
lst2 = []
for i in range(0,len(Oxygen_bar)):
    p = pow(Oxygen_bar[i], 2)
    lst2.append(p)
c = np.sqrt(sum(lst2))#构造出标准化公式中的分母部分
Oxygen_bar_standardized = [i/c for i in Oxygen_bar]
 
 
#2.PH_bar指标标准化
lst3 = []
for i in range(0,len(PH_bar)):
    p = pow(PH_bar[i], 2)
    lst3.append(p)
c = np.sqrt(sum(lst3))#构造出标准化公式中的分母部分
PH_bar_standardized = [i/c for i in PH_bar]
 
 
#3.Bacteria_bar指标标准化
lst4 = []
for i in range(0,len(Bacteria_bar)):
    p = pow(Bacteria_bar[i], 2)
    lst4.append(p)
c = np.sqrt(sum(lst4))#构造出标准化公式中的分母部分
Bacteria_bar_standardized = [i/c for i in Bacteria_bar]
 
#4.WP_bar指标标准化
lst5 = []
for i in range(0,len(WP_bar)):
    p = pow(WP_bar[i], 2)
    lst5.append(p)
c = np.sqrt(sum(lst5))#构造出标准化公式中的分母部分
WP_bar_standardized = [i/c for i in WP_bar]
 
 
#三、根据评分公式进行评分
#1.在评分前,将标准化后的变量拼接起来
stand_data = pd.DataFrame({'River':rawdata['River'],
    'Oxygen':pd.Series(Oxygen_bar_standardized),
'PH':pd.Series(PH_bar_standardized),
'Bacteria':pd.Series(Bacteria_bar_standardized),
'WaterPlants':pd.Series(WP_bar_standardized)}
)
 
 
#2.计算各指标的最大值和最小值,形成两个最值向量
stand_data.describe()
#各变量最大值
max_values = stand_data.describe().iloc[[7],:]
 
#各变量最小值
min_values = stand_data.describe().iloc[[3],:]
 
 
#3.计算每个河流向量到各变量最小值、最大值的距离
#计算每个河流向量到各变量最小值的距离
from scipy.spatial import distance
sd_data = stand_data.copy().drop(columns=['River'])
dst_to_min = []
for i in range(0,len(stand_data)):
    v = sd_data.iloc[[i], :]
    d = distance.euclidean(v, min_values)
    dst_to_min.append(d)
 
 
#计算每个河流向量到各变量最大值的距离
dst_to_max = []
for i in range(0,len(stand_data)):
    v = sd_data.iloc[[i], :]
    d = distance.euclidean(v, max_values)
    dst_to_max.append(d)
 
 
#根据评分公式,计算每个河流的得分
#S = dst_to_min /(dst_to_max + dst_to_min)
Score = []
for i in range(0,len(dst_to_min)):
    s = dst_to_min[i]/(dst_to_max[i] + dst_to_min[i])
    Score.append(s)
 
 
#得分归一化
total = sum(Score)
Score_normalized = [i/total for i in Score]
 
#将归一化后的得分添加到stand_data数据框中
stand_data['Score_normalized'] = Score_normalized
print(stand_data)

计算出的得分结果(Score_normalized):

6b000f4f94e2fd514e632d75d80cf372.png

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

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

相关文章

巴黎奥运会背后的8K国际公用信号制作

北京时间2024年8月12日凌晨3时&#xff0c;举世瞩目的巴黎奥运会闭幕式在法兰西体育场举行&#xff0c;闭幕式演出部分的主题为“记录”。BOSMA博冠首款8K 50P小型化广播级摄像机B1跟随中央广播电视总台“中国红”8K转播车&#xff0c;为田径比赛和闭幕式提供8K国际公用信号制作…

【Ajax使用说明】Ajax、Axios以及跨域

目录 一、原生Ajax 1.1 Ajax简介 1.2 XML简介 1.3 AJAX 的特点 1.3.1 AJAX的优点 1.3.2 AJAX 的缺点 1.4 AJAX 的使用 1.4.1AJAX的基本操作 1.4.2AJAX的传参 1.4.3 AJAX的post请求及设置请求体 1.4.4 AJAX响应json数据 1.4.5 AJAX请求超时与网络异常处理 1.4.5 AJ…

windows 使用Clion开发FreeSWITCH源码

1.准备环境 window安装clion可以编译freeswitch的docker镜像 2.clion配置ssh和Toolchain的配置 去这里看吧 3.makefile配置 Toolchain记得选ssh的 成功之后左下角有这个小锤子&#xff0c;这个小锤子就是生成makefile文件的&#xff0c;记得点击 同时就会出现这个东西 这样…

长文_ZATA

文章目录 环境配置问题miniconda安装torch报错OSError: [WinError 126] 找不到指定的模块。 环境配置问题 miniconda安装torch报错OSError: [WinError 126] 找不到指定的模块。 CSDN 原因&#xff1a;fbegmm.dll文件出现问题 解决方案&#xff1a; 使用依赖分析工具https:/…

SuccBI+低代码文档中心 —数据(数据连接、调度管理)

连接数据 数据加工和分析需要连接已存在的数据&#xff0c;通常是业务系统的数据或文件数据&#xff0c;业务系统数据一般存储在关系型数据库中。对于存储在json文件中的&#xff0c;也可以通过脚本数据加工的方式获取数据。 在数据模块下&#xff0c;点击新建&#xff0c;可以…

【Python机器学习】无监督学习——K-均值聚类算法

聚类是一种无监督的学习&#xff0c;它将相似的对象归到同一簇中&#xff0c;它有点像全自动分类。聚类方法几乎可以应用于所有的对象&#xff0c;簇内的对象越相似&#xff0c;聚类的效果越好。 K-均值聚类算法就是一种典型的聚类算法&#xff0c;之所以称之为K-均值是因为它…

【qt】QMainWindow下实现一个记事本

之前我们学过QWidget&#xff0c;QMainWindow会在ui界面多一个菜单 先实现ui界面 1.添加文本编辑&#xff0c;实现可以写多行 2.将文本编辑放大&#xff0c;拖动即可 3.编辑菜单栏 4.然后我们要实现对应子列表的功能&#xff0c;但是在这里不能转到槽&#xff0c;所以我们…

【Vue3】Pinia store 组合式写法

【Vue3】Pinia store 组合式写法 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗…

Java EE基础知识点

前言&#x1f440;~ 上一章我们介绍了性能测试工具LoadRunner&#xff0c;今天开启新的篇章Java EE进阶相关的内容 框架 Maven 项目构建 依赖管理 依赖传递 依赖排除 Maven概念 Maven仓库 Maven 设置国内源 创建Spring Boot项目 Web服务器 如果各位对文章的内容感兴…

Flutter 3.24 对普通开发者有哪些影响?

哈喽&#xff0c;我是老刘 Flutter 3.24刚刚发布了。突然觉得时间过得好快。六年前刚开始使用Flutter 1.0的场景还在眼前。 随着Flutter团队老成员的回归和新成员的加入。 前段时间Flutter团队裁员的影响似乎也逐步消退了。 新版本发布的功能逐步回到了该有的状态。 这里盘点…

解决域名加别名后再代理或者映射到fastadmin项目

如果遇到微应用不想再添加或者不方便添加单独的二级域名时&#xff0c;就需要用到代理或者映射来进入到我们的微应用项目中。 可以修改route.php路由文件的下面这个参数 __alias__ > [别名 > 模块/控制器] 如图 然后再修改config.php文件里面的view_replace_str参数…

C++入门基础知识11

C 关键字 下表列出了 C 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。 &#xff01;&#xff01;&#xff01;完整关键字介绍 &#xff08;下一篇博文中将详细罗列介绍&#xff09;

内网穿透:打破网络边界的神奇钥匙

在数字化时代&#xff0c;我们每天都在使用各种网络设备&#xff0c;但你是否曾想过&#xff0c;家里的智能摄像头、私人服务器或是游戏主机&#xff0c;如何能够在远离家的地方也能轻松访问&#xff1f; 这就需要涉及到内网穿透技术了。今天&#xff0c;我们就用简单的例子来揭…

coze 工作流使用

什么是工作流 工作流就是将一系列的逻辑节点串起来的流程&#xff0c;例如我们做一个爬虫&#xff0c;第一步先爬取网页内容&#xff0c;第二步数据清洗&#xff0c;得到我们想要的数据&#xff0c;第三步存到数据库。这里每步就是一个逻辑节点&#xff0c;她们之间有先后或是…

如何用不到一分钟的时间将Excel电子表格转换为应用程序

我们大多数人对电子表格又爱又恨。当企业需要分析数据、为决策过程提供信息并可视化信息时&#xff0c;Excel和Google Sheets是首选。这些文档非常容易创建&#xff0c;它们帮助我们以直接的方式构建相关的想法和适用的数据。除此之外&#xff0c;事情可能会变得一团糟。 对于…

服务注册中心--Eureka

一.Eureka概述 Eureka是一个基于REST的服务&#xff0c;主要用于AWS(Amazon Web Services 亚马逊云计算服务)云中的定位服务&#xff0c;以实现中间层服务器的负载平衡和故障转移在 Spring Cloud 微服务架构中通常用作注册中心, 我们称这个服务为 Eureka Server&#xff0c;还…

springboot学生作业管理系统---附源码14916

摘 要 在信息化社会中&#xff0c;人们需要针对性的信息获取途径。然而&#xff0c;由于不同角度和偏好的存在&#xff0c;人们经常只能获得特定类型的信息&#xff0c;这也是技术攻克难题之一。为了解决学生作业管理系统等问题&#xff0c;本研究通过分析和研究&#xff0c;设…

汽车免拆诊断案例 | 2011 款进口现代新胜达车智能钥匙系统有时失效

故障现象  一辆2011款进口现代新胜达车&#xff0c;搭载G4KE发动机&#xff0c;累计行驶里程约为26.3万km。车主进厂反映&#xff0c;有时进入车内按下起动按钮&#xff0c;发动机无法起动&#xff0c;且组合仪表黑屏。 故障诊断  接车后试车&#xff0c;车辆使用一切正常。…

Windows创建定时任务触发bat脚本 实现oracle数据库备份

Windows中的计划任务程序来触发oracle数据库备份脚本 任务计划程序 创建基本任务 填写名称、描述&#xff0c;下一步 触发任务&#xff1a;填写定时周期 操作&#xff1a;启动程序&#xff0c;选择要执行的bat脚本 点击完成&#xff0c;就能在任务列表中查看到我们刚才创…

【Linux】MySQL安装教程

Linux中MySQL安装教程 Step1&#xff1a;卸载系统自带的mysqlStep2&#xff1a;下载mysql8安装包Step3&#xff1a;上传mysql压缩包到 /opt 然后解压Step4&#xff1a;解压后按照如下顺序安装Step5&#xff1a;对mysql进行初始化Step6&#xff1a;修改mysql安装目录的所有用户和…