机器学习中的假设检验

  • 正态性检验
  • 相关分析
  • 回归分析

所谓假设检验,其实就是根据原假设来构造一种已知分布的统计量来计算概率,根据概率值大小来判断能否拒绝原假设,从而得到一种结论。假设检验的过程就是,构造一个原假设成立条件下的事件A,计算该A发生的概率P是否低于显著水平,即A是否为小概率事件(P值小于显著水平),若A为小概率事件,则原假设的发生的概率也不会很大,即可以拒绝原假设;而当p值大于显著水平,只是说明证伪结果不能推翻原假设即不能拒绝原假设而已,并不能说明原假设就是正确的就可以接受原假设。

例如机器学习中的最基本假设:样本分布与总体分布相似,样本可以代表总体,反之若样本不能反映总体,也就没有做机器学习的必要了,所以在训练模型之前,需要做一些假设检验,来决定能否使用该模型。

导入数据

import seaborn as sea
# 如遇中文显示问题可加入以下代码
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
import copy

#导入数据
data_raw=pd.read_excel(r'方差分析.xlsx')
data_clean=copy.deepcopy(data_raw)

data_clean.head(5)

正态性检验:数值特征的正态分布检验(一组数据的正态性检验)

  • 可视化:直方图、qq图,pp图,计算偏度与峰度
  • S-W检验:小样本≤50
  • K-S检验:大样本>50

Q-Q图是基于分位数的,P-P图是基于累积分布的

偏度:数据对称程度,

  • skewness = 0 —— 分布形态与正态分布偏度相同
  • skewness > 0 —— 正偏差数值较大,为正偏或右偏。长尾巴拖在右边,数据右端有较多的极端值
  • skewness < 0 —— 负偏差数值较大,为负偏或左偏。长尾巴拖在左边,数据左端有较多的极端值

峰度:数据陡峭程度

  • kurtosis = 0 —— 与正态分布的陡缓程度相同
  • kurtosis > 0 —— 比正态分布的高峰更加陡峭——尖顶峰
  • kurtosis < 0 —— 比正态分布的高峰来得平台——平顶峰

S-W、K-S检验:

原假设:服从正态分布

def checkNormal(df,tiger):#df:dataframe、数值
    import seaborn as sea
    from scipy import stats
    plt.figure(figsize=(8,5))
    #绘制直方图
    plt.subplot(131)
    sea.histplot(data=df,x=tiger, bins='auto', kde=True) 
    #绘制散点图
    plt.subplot(132)
    sea.scatterplot(data=df,x=df.index, y=tiger)
    #绘制qq图
    plt.subplot(133)
    stats.probplot(df[tiger], dist='norm', plot=plt)
    name=['偏度','峰度','S-W(≤5000):p','K-S(>5000):p']
    value=[data_clean[tiger].skew(),
           data_clean[tiger].kurt(),
          stats.shapiro(data_clean[tiger])[1],
           stats.kstest(data_clean[tiger], 'norm',args=(data_clean[tiger].mean(),data_clean[tiger].std()))[1]
          ]
    result=pd.DataFrame({'name':name,'value':value})
    print(result)
#     #计算偏度,峰度
#     print('偏度:',data_clean[tiger].skew())
#     print('峰度:',data_clean[tiger].kurt())
#     #s-w检验
#     stats.shapiro(data_clean[tiger])[1]
#     #k-s检验
#     stats.kstest(data_clean[tiger], 'norm',args=(data_clean[tiger].mean(),data_clean[tiger].std()))[1]#检验方法,例如'norm','expon','rayleigh','gamma',这里我们设置为'norm',即正态性检验


  check(data_clean,'被投诉次数')

首选方法是图示法,即利用直方图、Q-Q、PP图进行观察,如果分布严重偏态(左偏/右偏)和尖峰分布则建议进行假设检验。在样本量较小的时候优先选择S-W检验,反之使用K-S检验。统计学上正态性检验:原假设服从正态分布,即一般P值大于0.05我们可认为该组数据是符合正态分布。

相关分析

  • 数值变量与数值变量:相关系数显著性检验
    T检验:原假设:线性不相关(相关系数=0)
  • 分类变量与数值变量:方差分析:分类变量对数值变量是否有显著影响
    F检验:原假设:分类变量对数值变量没有影响,当分类变量只有两个类别时,也可用T检验。
  • 分类变量与分类变量:卡方分析:验证分类变量之间是否独立
    卡方检验:原假设:两个分类变量相互独立

T检验与方差分析均为差异显著性检验,用于比较两个(T检验)或者多个样本(方差分析)的差异是否显著的统计分析方法,原假设:H0:两组均值或多组均值相等。

T检验:

  • 均值差检验,检验两组数据(总体均为正态,且方差齐)的均值是否相等且数据为定量数据(分类变量对应数值变量)。
  • 此外,T检验也可以对相关系数、回归系数做显著性检验,原假设:H0:相关系数=0,H0:回归系数β=θ

方差分析:原假设H0:各个类别下的总体均值均相等,检验多个总体(方差齐)均值是否相等的方法,虽然它形式上是比较总体均值,但是本质上是研究变量之间的关系。这里的变量中,自变量是分类型的,因变量是数值型的,所研究的关系是是指分类自变量对数值因变量的影响。当分类特征只有两个类别时,此时方差分析(F检验)等价于T检验。

卡方分析:是一种非参数检验(对总体分布没有假定)

  • 可以用于独立性检验:可用于检验2个分类变量之间是否独立来判断是否相关,
    原假设H0:两个分类变量相互独立
  • 也可用于总体分布假设的检验(拟合优度检验)
    原假设:假设数据服从某种分布,从而根据概率密度函数得到概率值,计算观测频数与理论频数(np)的偏离程度,得到卡方统计量,来判断是否落在拒绝域内

导入数据

#加载数据
data_raw=pd.read_excel(r'./Data/泰坦尼克号/titanic3.xls')
data_clean=copy.deepcopy(data_raw)
#查看数据
data_clean.info()

相关系数显著性检验

#method{‘pearson’, ‘kendall’, ‘spearman’} :用来计算相关性的方法,默认为皮尔森相关系数
#min_periodsint:可选参数,为了获得有效结果所需要的最小的样本数量

def getCorr(inx,method='pearson'):#method:'pearson', 'spearman', 'kendall'
#输出相关系数和显著性检验P值
    inx_num=inx.select_dtypes('number')
    cols=inx_num.columns
    m,n=len(cols),len(cols)
#     print(cols)
    data_corr=pd.DataFrame(data=np.zeros((m,n)),index=cols,columns=cols)
    data_corr_p=pd.DataFrame(data=np.zeros((m,n)),index=cols,columns=cols)
    for i in data_corr.index:
        for j in data_corr.columns:
            if method=='pearson':
                corr_p=scipy.stats.pearsonr(inx_num[i], inx_num[j])
            elif method=='spearman':
                corr_p=scipy.stats.spearmanr(inx_num[i], inx_num[j])
            elif method=='kendall':
                corr_p=scipy.stats.kendalltau(inx_num[i], inx_num[j])
            data_corr.loc[i,j]=corr_p[0]
            data_corr_p.loc[i,j]=corr_p[1]
    return data_corr,data_corr_p

corr,corr_p=getCorr(data_clean)

方差分析

方差分析检验多个类别对应的总体均值是否相等的方法,是一种参数检验,对数据分布有一定要求。数据用什么样的检验方法进行分析,实际上取决于我们构造的统计量服从什么样的分布,只有服从这个分布,才可以利用这个分布的相关函数计算P值,如果实际上不服从这个分布,那么计算出的P值自然是不准确的。

  • 正态性:每个类别对应的数据服从正态分布
    原假设:服从正态分布
  • 方差齐:每个类别对应的总体的方差相同(每个分类特征对应的数值变量的方差相同)
    原假设:每个类别对应的方差相同

方差分析:理论上要求满足正态性和方差齐才可以使用方差分析,当数据不满足正态性和方差齐性假定时,参数检验可能会给出错误的答案。若正态性或方差齐不满足,则使用非参数检验方法检验分类特征对数值特征是否有显著影响,非参数检验对数据分布不作假设。
方差分析流程:

如下图所示,
正态性检验:原假设:行业中每个类别对应的总体分布为正态分布
方差齐检验:原假设:行业中每个类别对应的总体方差相同
方差齐检验前提:每个类别对应的总体均服从(近似)正态分布,每个类别的样本相互独立

每个类别对应的数据的正态性检验

#正态性检验:每个类别对应数据的正态分布检验
def checkGroupNormal(df,tiger,cat):#df:dataframe,tiger:数值变量,cat;分类变量
    import seaborn as sea
    from scipy import stats
    
    group=df[[cat,tiger]].groupby(cat)
    means=group.mean()
    stds=group.std()
    n=len(means)
    #绘制每个分类对应数据的直方图
#     plt.figure(1)
#     for i in range(1,n+1):
#         plt.subplot(n,1,i)
#         sea.histplot(data=df[df[cat]==means.index[i-1]],x=tiger, bins='auto', kde=True,label=means.index[i-1]) 
#         plt.legend()
    #绘制散点图
#     plt.figure(2)
#     for i in range(1,n+1):
#         plt.subplot(n,1,i)
#         sea.scatterplot(data=df[df[cat]==means.index[i-1]],x=df[df[cat]==means.index[i-1]].index, y=tiger,label=means.index[i-1])
#         plt.legend()
    #绘制qq图
#     plt.figure(3)
#     for i in range(1,n+1):
#         plt.subplot(n,1,i)
#         stats.probplot(df[df[cat]==means.index[i-1]][tiger], dist='norm', plot=plt)
    #计算偏度,峰度,s-w检验,k-s检验
    value=[]
    for i in means.index:
        data=data_clean[[cat,tiger]][data_clean[cat]==i][tiger]
        #偏度
        a=data.skew()
        #峰度
        b=data.kurt()
        #s-w检验
        c=stats.shapiro(data_clean[tiger])[1]
        #k-s检验
        u,std=means.loc[i,tiger], stds.loc[i,tiger]
        d=stats.kstest(data, 'norm',(u,std))[1]
        value.append([a,b,c,d])
    name=['偏度','峰度','S-W(≤5000):p','K-S(>5000):p']
    result=pd.DataFrame(data=np.array(value),index=means.index,columns=name)
    return result

print(checkGroupNormal(data_clean,'被投诉次数','行业'))

方差分析按照分类变量个数不同,可以分为单因素方差分析、双因素方差分析以及多因素方差分析。

  • 单因素方差分析
    单因素效应:其他因素水平固定时,某一因素不同水平之间的变化(其他分类特征水平类别时,某一分类特征不同类别之间的变化)。
  • 双因素方差分析
    主效应:不考虑其他因素的影响下,某因素不同水平之间的平均变化
    交互效应:两因素间的交互作用引起的其单独效应的平均变化
  • 多因素方差分析

注意:双因素分析或者多因素分析,均需要对每个分类特征的每个类别对应的数据做正态性检验和方差齐检验,均符合要求时才可以做方差分析,否则要使用非参数检验。

方差齐检验

def equalVarCheck(inx,tiger,categoric=[]):#tiger:数值变量,categoric:分类变量
    inx_tiger=inx[tiger]
    inx_class=list(inx.select_dtypes(exclude='number').columns) if len(categoric)<1 else categoric
    for col in inx_class:
        data=inx[[col,tiger]]
        group=data.groupby(col)#分组
        group_list=[list(np.array(i[1])[:,-1]) for i in group]#嵌套列表

        _,p=stats.levene(*group_list)
        print(col,p)

equalVarCheck(data_clean,'被投诉次数',['行业','地区'])

当数据满足正态性和方差齐时,

单因素方差分析:

from statsmodels.stats.anova import anova_lm #方差分析
from statsmodels.formula.api import ols  # 最小二乘法拟合

#单因素方差分析
model = ols('被投诉次数~C(行业)',data=data_clean).fit()
model_a=anova_lm(model)
model_a
# 组间平方和
# SSE=1456
#组内平方和
# SSA=2708
#R_2=SSE/(SSE+SSA)

计算关系强度R²

R_2=model_a['sum_sq'][0]/model_a['sum_sq'].sum()
R_2

以上单因素方差分析可以得出,行业因素对投诉次数有显著影响,行业因素有四种类别,四组之间的投诉次数有显著差异,但是我们不知道哪种行业与其他行业的不同,多重比较可以解决这个问题。
#

单因素各个水平之间的显著差异(多重比较):各组均值差异的成对检验

在检验出行业因素对投诉次数有显著影响,还需判断行业因素具体是哪两个类别对应的总体均值不相等,即行业因素中具体是哪两种行业才有显著差异。注意与方差齐检验的区别:方差齐是每个类别对应的总体方差相同。

# 这个看某个因素各个水平之间的差异
from statsmodels.stats.multicomp import pairwise_tukeyhsd

# 行业与被投诉次数的影响  显著水平为0.05
print(pairwise_tukeyhsd(data_clean['被投诉次数'], data_clean['行业'], alpha=0.05)) # 第一个必须是被投诉次数, 也就是我们的指标

  • pairwise_tukeyhsd函数默认原假设H0:各个水平两两组合没有差异,若P>0.05,接受原假设,反之拒绝原假设
  • Falset:说明无显著差异,True:有显著差异
  • 这个可以得到的结论是在显著水平0.05的时候, 航空公司和零售业的p值小于0.05, reject=True, 即认为航空公司和零售业之间有显著性差异(均值明显不同)。
# 地区与被投诉次数的影响  
print(pairwise_tukeyhsd(data_clean['被投诉次数'], data_clean['地区'], alpha=0.05)) #

地区变量对投诉次数没有显著影响,其各个水平之间也没有显著差异。

在机器学习中特征选择中,若投诉次数为目标变量,行业和地区为分类特征,则根据单因素方差分析结果,可过滤地区特征;对行业特征做one-hot编码后,可只保留行业-航空公司、行业-零售业这两种特征,或者对行业特征做one-hot编码后,做数值变量之间的相关性分析

双因素方差分析

  • 无交互作用:"加法"组合,即类似于特征工程中特征的线性组合
  • 有交互作用:“乘法”组合,即类似于特征工程中特征的多项式组合(非线性)

无交互作用

model = ols('被投诉次数~C(行业)+C(地区)',data=data_clean).fit()
model_a_b=anova_lm(model)
model_a_b

有交互作用

model = ols('被投诉次数~C(行业)*C(地区)',data=data_clean).fit()
model_ab=anova_lm(model)
model_ab

从结果可以看出,依然是行业特征对目标(被投诉次数)有显著影响,地区以及行业和地区的交互作用没有显著影响。

可视化观察

fig = interaction_plot(data_clean['行业'],data_clean['地区'], data_clean['被投诉次数'],ylabel='被投诉次数', xlabel='行业')

从图中也可以看出

  • 每个地区在每个行业的走势上一致,即地区与行业的交互作用不明显;
  • 航空公司和零售业对应的被投诉次数差异明显

. ols函数里面公式的写法

  • '被投诉次数~C(行业)+C(地区)+C(行业):C(地区)' :相当于被投诉次数是y(指标), 行业和地区是x(影响因素), 三项加和的前两项表示两个主效应, 第三项表示考虑两者的交互效应, 不加C也可。
  • '被投诉次数~C(行业, Sum)*C(地区, Sum)'和上面效果是一致的, 星号在这里表示既考虑主效应也考虑交互效应,'被投诉次数~C(行业)+C(地区)':这个表示不考虑交互相应

多因素方差分析:

多因素方差分析和双因素方差分析原理上一致

  • 无交互作用
    model = ols(''被投诉次数~C(行业)+C(地区)+C(其他)' ,data=data_clean).fit()
    model_a_b=anova_lm(model)
  • 有交互作用
    model = ols(''被投诉次数~C(行业)*C(地区)*C(其他)' ,data=data_clean).fit()
    model_ab=anova_lm(model)

非参数检验:分类变量与数值变量关系

当数据的正态性或方差齐不满足时,需改用非参数检验(非参数检验利用的是数据间的次序关系,会造成了一定的信息损失)。Welch’s ANOVA就是其中一种非参数检验方法。在python中使用Welch’s ANOVA需要安装pingouin库。其中的welch_anova和pairwise_gameshowell分别用于Welch’s ANOVA和两两比较。

卡方分析

分类变量间的独立性检验,原假设:两个分类变量相互独立

from scipy.stats import chi2_contingency

检验地区与行业两个分类变量是否独立,生成地区与行业的频数交叉连接表

df=pd.crosstab(data_clean['地区'], data_clean['行业'])#交叉连接表:频数
df

X_2, p, dof, expected = chi2_contingency(df,correction=False)
#dof:degree of freedom,(3-1)(4-1)
#p:概率值
## 卡方值、P值、自由度、理论(期望)频数,无需耶茨连续性修正
#当某个单元格的频数(np)小于5时,需要进行校正correction=False

不能拒绝原假设,不能拒绝地区和行业分类变量相互独立。

回归方程显著性检验、回归系数显著性检验

为什么要对回归方程和回归系数做显著性检验?
许多数据统计分析结果来自于部分甚至少量的样本,因此所得的统计结果可能存在偶然性,需要对样本统计结果进行显著性检验,以查看统计结果的可靠性程度。

  • 回归方程的显著性检验:F,原假设:各个回归系数均为0
    检验回归方程是判断自变量和因变量之间是否显著的线性关系
  • 回归系数的显著性检验:T,原假设:某个回归系数=0
    检验回归系数时判断自变量(特征)对因变量(目标)是否有显著影响
  • 逻辑回归方程、回归系数显著性检验:卡方检验
import statsmodels.api as sm
#最小二乘法拟合
result=sm.OLS(Y,X).fit()
result.summary()
#拟合度:
#R2=0.959:R2接近1,拟合程度好
#Adj.R-squared:修正R2
#回归方程的显著性检验:F,原假设:各个回归系数=0
#F-statistic:F值=891.3
#Prob:回归方程的P值=0.,小概率事件,原假设不成立
#回归系数的显著性检验:T,原假设:某个回归系数=0
# P>|t|:t》|t_a/2|,P越小于a,原假设越是小概率事件,越拒绝原假设,即某个回归系数对应的特征对标签Y是显著的

#置信区间有什么用呢?

图中P>|t|表示双侧T检验

model = sm.Logit(y, x)
result = model.fit()
result.summary()

对回归方程和回归系数做显著性检验,可以帮助我们做模型诊断。

回归分析,通常需要满足一些基本假设

  • 自变量和因变量之间存在线性关系
  • 样本之间是独立的,即样本的观测值不受其他样本的影响
  • 自变量之间不存在高度相关性,即不出现多重共线性问题

某个变量的回归系数不显著可能的原因

  • 特征与目标存在非线性关系,未提取出来,因为线性模型只能捕捉到线性关系,而不能处理非线性关系。
    解决办法:① 增加新的非线性特征。② 变换自变量和因变量。取对数、开方、平方根等,以达到线性关系。③ 使用非线性回归模型,例如多项式回归、指数回归等

     
  • 存在共线特征导致伪回归,变量之间存在强相关性,会导致回归分析结果不稳定,使得回归系数不显著。

    解决办法:① 删除相关性较高的自变量,② 合并相关性较高的自变量,即将相关性高的变量组合成一个新的变量,③ 使用PCA,将原始的高度相关的自变量转换成一组线性无关的主成分,④ 正则化方法(如岭回归、Lasso回归)或者自变量选择方法(逐步回归,最小角回归)来缩减回归系数,减小多重共线性影响

  • 回归不显著也可能是由于未引入自变量之间存在交互作用导致的。 在回归分析中,交互作用指的是自变量之间相互影响的情况。 当存在交互作用时,单独考虑自变量与因变量的关系可能会导致结果的不显著。 因此,在回归不显著时,可以尝试引入交互作用项,以更全面地考虑自

  • 样本量不足,回归系数的标准误差可能较大,计算t值或F值时出现较大的误差,从而导致回归系数的p值变大或出现NaN,进而导致回归系数不显著
    解决办法:① 增加样本量② 减少自变量③ 使用非参数回归方法,降低对样本量的依赖性
  • 异常值可能对回归系数的计算产生影响,使得回归系数不显著。
  • 该变量是无关变量:解决办法:直接剔除

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于斑马算法的无人机航迹规划-附代码

基于斑马算法的无人机航迹规划 文章目录 基于斑马算法的无人机航迹规划1.斑马搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用斑马算法来优化无人机航迹规划。 1.斑马搜索算法 …

内网可达网段探测netspy- Mac环境

netspy是一款快速探测内网可达网段工具 当我们进入内网后想要扩大战果&#xff0c;那我们可能首先想知道当前主机能通哪些内网段。 netspy正是一款应用而生的小工具&#xff0c;体积较小&#xff0c;速度极快&#xff0c;支持跨平台&#xff0c;支持多种协议探测&#xff0c;…

软件测试/校招推荐丨鼎捷软件股份有限公司岗位开放

点此获取更多相关资料 软件测试工程师 岗位职责 负责公司产品的日常测试工作&#xff1b;依据软件需求和非功能需求&#xff0c;编写测试方案和测试用例&#xff0c;设计测试脚本&#xff1b;负责服务器系统和软件的日常维护工作&#xff0c;为上线部署和运维活动提供技术支持…

HarmonyOS应用开发

引言 本章将深入探讨 HarmonyOS 应用开发的关键方面&#xff0c;包括应用的生命周期、数据存储和网络访问。了解这些内容对于创建功能丰富、高效的 HarmonyOS 应用至关重要。 目录 HarmonyOS 应用的生命周期HarmonyOS 应用的数据存储HarmonyOS 应用的网络访问总结 1. Harmo…

python 时间加法 输出t分钟后的时间

题目&#xff1a; 现在时间是a点b分&#xff0c;请问t分钟后&#xff0c;是几点几分&#xff1f; 输入&#xff1a; 第一行包含一个整数a 第二行包含一个整数b 第三行包含一个整数t 其中&#xff0c;0≤a≤23&#xff0c;0≤b≤59&#xff0c;0≤t&#xff0c;t分钟后还…

【Linux】进程的基本概念和进程控制

TOC 目录 一.冯诺依曼体系结构 二. 操作系统(Operator System) 概念 设计OS的目的 定位 总结 系统调用和库函数概念 进程 基本概念 描述进程-PCB task_struct-PCB的一种 task_ struct内容分类 组织进程 查看进程 通过系统调用获取进程标识符 进程状态 D--深度…

Android内存回收机制、GC算法及内存问题分析解决

Android内存回收机制、GC算法及内存问题分析解决 在Android开发中&#xff0c;Java内存回收和垃圾收集&#xff08;GC&#xff09;机制是确保应用程序高效运行的关键部分。针对不同对象存活率&#xff0c;Android平台采用了引用计数算法和可达性分析法来判定对象的可回收性&am…

【代码随想录】算法训练营 第二十天 第六章 二叉树 Part 6

654. 最大二叉树 题目 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回…

IntelliJ IDEA 2023.2.1 (Ultimate Edition) 版本 Git 如何合并多次的本地提交进行 Push

本心、输入输出、结果 文章目录 IntelliJ IDEA 2023.2.1 (Ultimate Edition) 版本 Git 如何合并多次的本地提交进行 Push前言为什么需要把多次本地提交合并合并提交的 2 种形式:事中合并、事后合并事中合并事后合并:支持拆分为多组提交弘扬爱国精神IntelliJ IDEA 2023.2.1 (U…

Android Camera App启动流程解析

前言&#xff1a;做了7年的camera app开发&#xff0c;给自己一个总结&#xff0c;算是对camera的一次告白吧。Camera被大家誉为手机的眼睛&#xff0c;是现在各大手机厂商的卖点&#xff0c;也是各大厂商重点发力的地方。Camera的重要性我就不在这里赘述了&#xff0c;让我们进…

【跟小嘉学习JavaWeb开发】第一章 开发环境搭建

系列文章目录 【跟小嘉学习JavaWeb开发】第一章 开发环境搭建 文章目录 系列文章目录[TOC](文章目录) 前言一、JDK的下载与安装1.1、关于JDK的版本问题 二、环境变量配置2.1、配置 JAVA_HOME、CLASSPATH2.2、配置path2.3、启动 cmd 三、编写代码、编译并执行3.1、编写代码&…

输出所有最长公共子序列

输出所有最长公共子序列 什么是最长公共子序列过程讲解完整程序代码&#xff08;python&#xff09; 什么是最长公共子序列 在力扣题库中的1143题有一道最长公共子序列&#xff0c;但是那个只是返回最长子序列的长度&#xff0c;而没有输出所有的最长子序列 通过上图中的举例…

Python制作采集直播弹幕小软件

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.8 Pycharm模块使用: import requests >>> pip install requests import time import tkinter&#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方&#xff0c;…

AVL树详解

目录 AVL树的概念 旋转的介绍 单旋转 双旋转 旋转演示 具体实现 通过高度判断的实现 通过平衡因子判断的实现 AVL树的概念 AVL树是一种自平衡的平衡二叉查找树&#xff0c;它是一种高效的数据结构&#xff0c;可以在插入和删除节点时保持树的平衡&#xff0c;从而保证…

vivado时序分析-1

AMD Vivado ™ 集成设计环境 (IDE) 提供了多项报告命令 &#xff0c; 用于验证设计是否满足所有时序约束 &#xff0c; 以及是否准备好加载到应用开发板上。“Report Timing Summary ” &#xff08; 时序汇总报告 &#xff09; 属于时序验收报告 &#xff0c; 等同于 ISE De…

uniapp中picker 获取时间组件如何把年月日改成年月日默认时分秒为00:00:00

如图所示&#xff0c;uniapp中picker组件的日期格式为&#xff1a; 但后端要 2023-11-08 00:00:00格式 如何从2023-11-08转化为 2023-11-08 00:00:00&#xff1a;&#x1f447; const date new Date(e.detail.value);//"2023-11-17" date.setHours(0, 0, 0); // 2…

springboot actuator:开放全部(部分)端点、端点映射、端点保护

目录 开放全部端点&#xff08;不安全&#xff09;&#xff1a; 开放部分端点 端点映射 端口保护 1、 添加Spring Security依赖&#xff1a; 2、Spring Security简单配置类&#xff1a; 3、application.yml配置规则 4、写一个简单的controller 5、简单登录页面 目…

【hcie-cloud】【2】华为云Stack解决方案介绍、缩略语整理 【下】

文章目录 华为文档获取方式、云计算发展背景、坚实基座华为云Stack&#xff0c;政企只能升级首选智能数据湖仓一体&#xff0c;让业务洞见更准&#xff0c;价值兑现更快MRS&#xff1a;一个架构可构建三种数据湖&#xff0c;业务场景更丰富离线数据湖&#xff1a;提供云原生、湖…

强化您的应用安全,从app加固开始

强化您的应用安全&#xff0c;从app加固开始 目录 强化您的应用安全&#xff0c;从app加固开始 摘要 引言 1. 加密和数据保护 2. 代码混淆 3. 防止反编译 4. 安全测试 5. 更新和补丁 6. 权限控制 7. 输入验证和输出过滤 8. 日志记录和监控 9. 安全设计和架构 10.…

GoLong的学习之路(二十二)进阶,语法之并发(go最重要的特点)(channel的主要用法)

这一章是接上一章内容继续&#xff0c;上一章说到协程也就是goroutine&#xff0c;如何使用它&#xff0c;这一张是讲一种数据结构。当然这个章节的数据结构非常重要。可以说这个数据结构就是为了方便协程&#xff0c;才制作出来的。 单纯地将函数并发执行是没有意义的。函数与…