《机器学习实战》8.预测数值型数据:回归

news2024/11/15 18:43:58

目录

预测数值型数据:回归

1 利用线性回归找到最佳拟合直线

2 局部加权线性回归

3 示例:预测鲍鱼的年龄

4 缩减系数来“理解”数据

4.1 岭回归

4.2 lasso

4.3 前向逐步回归

5 权衡偏差与方差

6 示例:预测乐高玩具套装的价格

6.1 收集数据:使用google购物的API

6.2 训练算法:建立模型

7 本章结束


本节涉及的相关代码和数据

预测数值型数据:回归

本章内容:

① 线性回归

② 局部加权线性回归

③ 岭回归和逐步线性回归

④ 预测鲍鱼年龄和玩具售价

1 利用线性回归找到最佳拟合直线

线性回归的相关特点主要是

优点:结果易于理解,计算上不复杂

缺点:对非线性数据不友好

适用数据类型:数值型和标称型

回归的一般方法:

① 收集数据:采用任意方法收集数据

② 准备数据:回归需要数值型数据,标称型数据将会被转为二值型数据

③ 分析数据:绘出数据的可视化二维图将有助于对数据做出理解和分析,在采用缩减法求得新回归系数之后,可以将新拟合曲线绘在图上作为对比

④ 训练算法:找到回归系数

⑤ 测试算法:使用R2或者预测值和数据的拟合度,来分析模型的结果

⑥ 使用算法:使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续性数据而不仅仅是离散的数据标签

采用最小平方误差

# 标准回归函数和数据导入函数
from numpy import *
# 加载数据
def loadDataSet(fileName):
    # print(fileName)
    numFeat=len(open(fileName).readline().split('\t'))-1
    dataMat=[]
    labelMat=[]
    fr=open(fileName)
    for line in fr.readlines():
        lineArr=[]
        curLine=line.strip().split('\t')
        for i in range(numFeat):
            lineArr.append(float(curLine[i]))
            # print(lineArr)
        # print(lineArr)
        dataMat.append(lineArr)
        labelMat.append(float(curLine[-1]))
    # print(dataMat)
    return dataMat,labelMat

# 线性回归函数
def standRegres(xArr,yArr):
    # 数组转为矩阵
    xMat=mat(xArr)
    yMat=mat(yArr).T
    xTx=xMat.T*xMat
    # linalg.det()函数可以直接用来计算行列式
    if linalg.det(xTx)==0.0:
        print("this matrix is singular,cannot do inverse")
        return
    # matrix.I获得与给定矩阵相同大小的乘法逆
    ws=xTx.I*(xMat.T*yMat)
    # 返回权重
    return ws

调用上述函数:

xArr,yArr=loadDataSet('ex0.txt')
# xArr
# 回归系数
ws=standRegres(xArr,yArr)
ws

输出得到的结果为:

 将得到的权重系数,画图表示为:

# 绘图
def plotData(xArr,yArr,ws):
    import matplotlib.pyplot as plt
    xMat = mat(xArr)
    yMat = mat(yArr)
    figure = plt.figure()
    ax = figure.add_subplot(111)
    # 取第二个特征绘图
    # flatten()函数转化成一维数组
    # matrix.A属性返回矩阵变成的数组,和getA()方法一样
    # 绘制点
    ax.scatter(xMat[:,1].flatten().A[0], yMat.T[:,0].flatten().A[0])
    # 返回给定数据的数组形式的拷贝
    xCopy = xMat.copy()
    # 升序排序
    xCopy.sort(0)
    print (ws.shape)
    yHat = xCopy * ws # yHat 表示拟合直线的纵坐标,用回归系数求出
    ax.plot(xCopy[:,1], yHat, c = 'green')
    plt.show()


plotData(xArr,yArr,ws)

得到的输出图像为:

可以看到该拟合,虽然在数据计算上结果较好,但可能单纯的线性拟合并不能够得到很好的结果,因为原始数据很明显有一个波浪形的分布,而不单单是线性分布。

 计算该拟合结果的相关系数为:

# 计算相关系数
def calcCorrel(xArr,yArr,ws):
    xMat = mat(xArr)
    yMat = mat(yArr)
    yHat=xMat*ws
    # 转置yHat向量,以保证都是行向量
    # corrcoef函数计算皮尔逊相关系数
    correl=corrcoef(yHat.T,yMat)
    return correl

calcCorrel(xArr,yArr,ws)

 得到的结果为:

2 局部加权线性回归

线性回归的一个问题就是有可能出现欠拟合的现象,因为他求的是具有最小均方误差的无偏估计。显而易见,如果模型欠拟合将不能取得最好的预测效果。所以有些方法允许在估计中引入一些偏差,从而降低预测的均方误差。

其中一个方法就是局部加权线性回归(LWLR)。我们给待预测点附近的每个点赋予一定的权重,然后在这个基础上基于最小均方差来进行普通的回归。与KNN一样,这种算法每次预测均需事先选取处对应的数据子集。LWLR使用‘核’来对附近的点赋予更高的权重。核的类型可以自由选择,常用的有高斯核。

def lwlr(testPoint,xArr,yArr,k=1.0):
    xMat=mat(xArr)
    yMat=mat(yArr).T
    m=shape(xMat)[0]
    # eye()函数返回一个二维数组,对角线为1,其余地方为0
    weights=mat(eye((m)))
    for j in range(m):
        diffMat=testPoint-xMat[j,:]
        weights[j,j]=exp(diffMat*diffMat.T/(-2.0*k**2))
    xTx=xMat.T*(weights*xMat)
    if linalg.det(xTx)==0.0:
        print("this matrix is singular,cannot do inverse")
        return
    ws=xTx.I*(xMat.T*(weights*yMat))
    
    return testPoint*ws

def lwlrTest(testArr,xArr,yArr,k=1.0):
    m=shape(testArr)[0]
    yHat=zeros(m)
    for i in range(m):
        yHat[i]=lwlr(testArr[i],xArr,yArr,k)
    return yHat

调用上述函数:

lwlr(xArr[0],xArr,yArr)

得到的输出结果为:

 画出该拟合的结果曲线为:

def plotDatalwlr(xArr,yArr,k=0.01):
    yHat=lwlrTest(xArr,xArr,yArr,k)
    xMat=mat(xArr)
    # 对样本x升序排序并返回索引
    srtInd=xMat[:,1].argsort(0)
    xSort=xMat[srtInd][:,0,:]
    import matplotlib.pyplot as plt
    fig=plt.figure()
    ax=fig.add_subplot(111)
    ax.plot(xSort[:,1],yHat[srtInd])
    ax.scatter(xMat[:,1].flatten().A[0],mat(yArr).T.flatten().A[0],s=2,c='red')
    plt.show()
xArr,yArr=loadDataSet('ex0.txt')
plotDatalwlr(xArr,yArr)

得到的拟合图像为:

局部加权线性回归也存在一个问题,即增加了计算量,因为他对每个点做预测时都必须使用整个数据集。如果避免这些计算将可以减少程序运行时间,从而减缓因计算量增加带来的问题。

3 示例:预测鲍鱼的年龄

 

# 计算误差
def rssError(yArr,yHatArr):
    # **表示幂运算,前面为底数,后面为指数
    return ((yArr-yHatArr)**2).sum()

abX,abY=loadDataSet('abalone.txt')

plotDatalwlr(abX[0:99],abY[0:99],0.1)
plotDatalwlr(abX[0:99],abY[0:99],1)
plotDatalwlr(abX[0:99],abY[0:99],10)

# 训练集
yHat01_=lwlrTest(abX[0:99],abX[0:99],abY[0:99],0.1)
yHat1_=lwlrTest(abX[0:99],abX[0:99],abY[0:99],1)
yHat10_=lwlrTest(abX[0:99],abX[0:99],abY[0:99],10)

err01_=rssError(abY[0:99],yHat01_.T)
err1_=rssError(abY[0:99],yHat1_.T)
err10_=rssError(abY[0:99],yHat10_.T)

print(err01_,err1_,err10_)

# 测试集
yHat01=lwlrTest(abX[100:199],abX[0:99],abY[0:99],0.1)
yHat1=lwlrTest(abX[100:199],abX[0:99],abY[0:99],1)
yHat10=lwlrTest(abX[100:199],abX[0:99],abY[0:99],10)

err01=rssError(abY[100:199],yHat01.T)
err1=rssError(abY[100:199],yHat1.T)
err10=rssError(abY[100:199],yHat10.T)

print(err01,err1,err10)

得到的输出结果为:

可以看到,使用较小的核可以获得较低的误差,但是使用最小的核可能会造成过拟合,对新数据不一定能够达到最好的效果

接下来再和简单的线性回归做个比较

ws=standRegres(abX[0:99],abY[0:99])
yHat=mat(abX[100:199])*ws
rssError(abY[100:199],yHat.T.A)

 得到结果为:

简单线性回归达到了与局部加权线性回归类似的效果,这也表明:必须在未知数据上比较效果才能够选取到最佳模型

4 缩减系数来“理解”数据

如果数据的特征比样本点还多,也就是说输入数据的矩阵X不是满秩矩阵。非满秩矩阵在求逆时会出现问题,因此,引入了“岭回归”的概念,这就是第一种缩减方法,接着是lasso方法,效果很好但复杂,最后介绍了第二种缩减方法,称为前向逐步回归,可以得到与lasso差不多的效果,也更容易实现。

4.1 岭回归

岭回归就是在矩阵XTX上加入一个λI从而使矩阵非奇异,进而就能对矩阵求逆,其中矩阵I时一个单位矩阵,λ由用户自定义。

缩减方法可以去掉不重要的参数,因此能够更好的理解数据,此外,与简单的线性回归相比,缩减法能够取得更好的效果。

# 用于计算回归系数
# 实现给定系数下的岭回归
def ridgeRegres(xMat,yMat,lam=0.2):
    xTx=xMat.T*xMat
    denom=xTx+eye(shape(xMat)[1])*lam
    if linalg.det(denom)==0.0:
        print("this matrix is singlar,cannot do inverse")
        return
    ws=denom.I*(xMat.T*yMat)
    return ws

# 在一组λ上测试结果
def ridgeTest(xArr,yArr):
    xMat=mat(xArr)
    yMat=mat(yArr).T
    yMean=mean(yMat,0)
    yMat=yMat-yMean
    xMeans=mean(xMat,0)
    # var()函数求样本方差的无偏估计值,如果参数是1,就是有偏估计
    xVar=var(xMat,0)
    xMat=(xMat-xMeans)/xVar
    numTestPts=30
    wMat=zeros((numTestPts,shape(xMat)[1]))
    for i in range(numTestPts):
        ws=ridgeRegres(xMat,yMat,exp(i-10))
        wMat[i,:]=ws.T
    return wMat

abX,abY=loadDataSet('abalone.txt')
ridgeWeights=ridgeTest(abX,abY)

# 绘制出回归系数与log(λ)的关系
import matplotlib.pyplot as plt
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(ridgeWeights)
plt.show()

 得到的结果为:

 

4.2 lasso

lasso对回归系数做出了限定,使用绝对值取代了平方和,在λ足够小的时候,一些系数会因此被迫缩减到0,这个特性将有助于理解数据

4.3 前向逐步回归

属于一种贪心的算法,每一步都尽可能的减小误差。一开始所有的权重都设置为1,然后每一步所作的决策是对某个权重增加或减少一个很小的值

伪代码:

数据标准化,使其分布满足0均值和单位方差

在每轮迭代中:

    设置当前最小误差lowestError为正无穷

    对每个特征:

        增大或减小:

            改变一个系数得到一个新的w

            计算新w下的误差

            如果误差Error小于当前最小误差lowestError:

                设置Wbest等于当前w

        将w设置为新的Wbest

# 实现矩阵归一化
def regularize(xMat):
    inMat = xMat.copy()
    # 得到平均数,压缩行,对每一列求平均值
    inMeans = mean(inMat,0)  
    
    inVar = var(inMat,0)    
    inMat = (inMat - inMeans)/inVar
    return inMat

# 前向逐步线性回归
def stageWise(xArr,yArr,eps=0.01,numIt=100):
    xMat=mat(xArr)
    yMat=mat(yArr).T
    # mean()函数求平均值
    yMean=mean(yMat,0)
    yMat=yMat-yMean
    xMat=regularize(xMat)
    m,n=shape(xMat)
    returnMat=zeros((numIt,n))
    ws=zeros((n,1))
    wsTest=ws.copy()
    wsMax=ws.copy()
    for i in range(numIt):
        print(ws.T)
        lowestError=inf
        for j in range(n):
            for sign in [-1,1]:
                wsTest=ws.copy()
                wsTest[j]+=eps*sign
                yTest=xMat*wsTest
                rssE=rssError(yMat.A,yTest.A)
                if rssE<lowestError:
                    lowestError=rssE
                    wsMax=wsTest
        ws=wsMax.copy()
        returnMat[i,:]=ws.T
    return returnMat

 调用函数:

xArr,yArr=loadDataSet('abalone.txt')
stageWise(xArr,yArr,0.01,200)

得到的输出结果为:

 与最小二乘法的结果进行对比得到

# 最小二乘法的结果
xMat=mat(xArr)
yMat=mat(yArr).T
xMat=regularize(xMat)
yM=mean(yMat,0)
yMat=yMat-yM
weights=standRegres(xMat,yMat.T)
weights.T

结果为:

 

5 权衡偏差与方差

任何时候,一旦发现模型和测量值直接存在差异,就说明出现了误差。当考虑模型中的“噪声”或者说误差时,必须考虑其来源。可能会因为对复杂的模型进行简化,这将导致在模型和测量值之间出现“噪声”或者“误差”,若无法理解数据的真实生成过程,也会导致差异的发生。

一般认为,误差一般由三个部分组成:偏差、测量误差和随机噪声

方差是可以度量的,如果从总体数据中取一个随机样本集并用线性模型拟合,将会得到一组回归系数,同理,再取出另一组随机样本集并拟合,将会得到另一组回归系数。这些系数之间的差异大小也就是模型反差大小的反映。

6 示例:预测乐高玩具套装的价格

①收集数据:用google Shopping的APi收集数据

②准备数据:从返回的json数据中抽取价格

③分析数据:可视化并观察数据

④训练算法:构建不同的模型,采用逐步线性回归和直线的线性回归模型

⑤测试算法:使用交叉验证来测试不同的模型,分析哪个效果更好

⑥使用算法:这次联系的目的就是生成数据模型

6.1 收集数据:使用google购物的API

from bs4 import BeautifulSoup
def scrapePage(retX, retY, inFile, yr, numPce, origPrc):
     # 打开并读取HTML文件
    with open(inFile, encoding='utf-8') as f:
        html = f.read()
    # beautiful函数将复杂HTML文档转换成一个复杂的树形结构
    soup = BeautifulSoup(html)
    i = 1
    # 根据HTML页面结构进行解析
    currentRow = soup.find_all('table', r = "%d" % i)
    while(len(currentRow) != 0):
        currentRow = soup.find_all('table', r = "%d" % i)
        title = currentRow[0].find_all('a')[1].text
        lwrTitle = title.lower()
        # 查找是否有全新标签
        if (lwrTitle.find('new') > -1) or (lwrTitle.find('nisb') > -1):
            newFlag = 1.0
        else:
            newFlag = 0.0
        # 查找是否已经标志出售,我们只收集已出售的数据
        soldUnicde = currentRow[0].find_all('td')[3].find_all('span')
        if len(soldUnicde) == 0:
            print("商品 #%d 没有出售" % i)
        else:
            # 解析页面获取当前价格
            soldPrice = currentRow[0].find_all('td')[4]
            priceStr = soldPrice.text
            priceStr = priceStr.replace('$','')
            priceStr = priceStr.replace(',','')
            if len(soldPrice) > 1:
                priceStr = priceStr.replace('Free shipping', '')
            sellingPrice = float(priceStr)
            # 去掉不完整的套装价格
            if  sellingPrice > origPrc * 0.5:
                print("%d\t%d\t%d\t%f\t%f" % (yr, numPce, newFlag, origPrc, sellingPrice))
                retX.append([yr, numPce, newFlag, origPrc])
                retY.append(sellingPrice)
        i += 1
        currentRow = soup.find_all('table', r = "%d" % i)
 
def setDataCollect(retX, retY):
    scrapePage(retX, retY, './lego/lego8288.html', 2006, 800, 49.99)  # 2006年的乐高8288,部件数目800,原价49.99
    scrapePage(retX, retY, './lego/lego10030.html', 2002, 3096, 269.99)  # 2002年的乐高10030,部件数目3096,原价269.99
    scrapePage(retX, retY, './lego/lego10179.html', 2007, 5195, 499.99)  # 2007年的乐高10179,部件数目5195,原价499.99
    scrapePage(retX, retY, './lego/lego10181.html', 2007, 3428, 199.99)  # 2007年的乐高10181,部件数目3428,原价199.99
    scrapePage(retX, retY, './lego/lego10189.html', 2008, 5922, 299.99)  # 2008年的乐高10189,部件数目5922,原价299.99
    scrapePage(retX, retY, './lego/lego10196.html', 2009, 3263, 249.99)  # 2009年的乐高10196,部件数目3263,原价249.99

调用上面函数:

lgX=[]
lgY=[]
setDataCollect(lgX,lgY)

得到结果:

6.2 训练算法:建立模型

为上面收集到的数据建立模型。构建出来的模型可以对售价做出预测

# 创建一个全为1 的矩阵
lgX1=mat(ones((63,5)))
print(lgX1[0])
# 将原数据矩阵lgX复制到新数据矩阵lgX1的第一列到第五列
lgX1[:,1:5]=mat(lgX)
# 确认数据复制的正确性
print(lgX[0])
print(lgX1[0])
ws=standRegres(lgX1,lgY)
ws

得到的输出结果为:

 交叉测试验证岭回归

# 交叉测试验证岭回归
                            #  交叉验证的次数
def crossValidation(xArr,yArr,numVal=10):
    m=len(yArr)
    indexList=list(range(m))
    errorMat=zeros((numVal,30))
    for i in range(numVal):
        trainX=[]
        trainY=[]
        testX=[]
        testY=[]
        random.shuffle(indexList)
        # 将数据分为测试集和训练集
        for j in range(m):
            if j<m*0.9:
                trainX.append(xArr[indexList[j]])
                trainY.append(yArr[indexList[j]])
            else:
                testX.append(xArr[indexList[j]])
                testY.append(yArr[indexList[j]])
            
        wMat=ridgeTest(trainX,trainY)
        for k in range(30):
            matTestX=mat(testX)
            matTrainX=mat(trainX)
            meanTrain=mean(matTrainX)
            varTrain=var(matTrainX,0)
            matTeatX=(matTestX-meanTrain)/varTrain
            yEst=matTestX*mat(wMat[k,:]).T+mean(trainY)
            errorMat[i,k]=rssError(yEst.T.A,array(testY))
    meanErrors=mean(errorMat,0)
    minMean=float(min(meanErrors))
    bestWeights=wMat[nonzero(meanErrors==minMean)]
    xMat=mat(xArr)
    yMat=mat(yArr).T
    meanX=mean(xMat,0)
    varX=var(xMat,0)
    unReg=bestWeights/varX
    # 岭回归的最佳模型是
    print("the best model from Ridge Regression is :\n",unReg)
    # 常数项
    print("with constant term:",-1*sum(multiply(meanX,unReg))+mean(yMat))

crossValidation(lgX,lgY,10)

 得到的输出结果为:

这些系数是经过不同程度的缩减得到的

7 本章结束

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

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

相关文章

数字化转型指南发布,官方明确这样做!

上周&#xff0c;工信部《中小企业数字化转型指南》&#xff08;以下简称《指南》&#xff09;一经发布&#xff0c;便获得了大量官方媒体的转发&#xff0c;成为了几乎所有制造人的关注所在。制造企业数字化转型的标准路径首次被标准化&#xff0c;并传递给了更多的中国制造企…

python可以考的资格认证有哪些?

前言 可以考虑用Python做一个博客&#xff0c;或者仿制一个微博&#xff0c;或者仿制一个视频网站&#xff0c;或者仿制一个购物网站。界面简单一些&#xff0c;但是基础功能好用就行。&#xff08;文末送读者福利&#xff09; 2.或者学习用Python在网上爬一些数据&#xff0…

就地执行Windows Server2022升级

项目初期背景:“微软Windows Server 2012/2012 R2将于2023年10月停止支持 微软今天发出提醒,Windows Server 2012 和 Windows Server 2012 R2 将于 2023 年 10 月终止支持,届时将不再发布补丁更新。由于外企公司比较注重信息安全,对所有服务器需要确保有补丁修复更新,以便保…

一些逻辑漏洞案例

逻辑漏洞的一些案例 某edu高校逻辑漏洞弱口令 已提交该校&#xff0c;已修复 注册登陆 寻找上传点&#xff0c;无果&#xff0c;后缀名不可控 找到另一个登陆点&#xff0c;尝试使用之前注册的账户登陆、爆破、均无果 在测试找回密码处&#xff0c;发送admin用户发现返回管理…

云计算实验4 面向行业背景的大数据分析与处理综合实验

一、 实验目的 掌握分布式数据库接口Spark SQL基本操作&#xff0c;以及训练综合能力&#xff0c;包括&#xff1a;数据预处理、向量处理、大数据算法、预测和可视化等综合工程能力 二、 实验环境 Linux的虚拟机环境和实验指导手册 三、 实验任务 完成Spark SQL编程实验、…

[附源码]java毕业设计基于篮球云网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

电压放大器原理(电压放大器适用于什么场合使用)

前阵子有不少的工程师在后台咨询&#xff0c;电压放大器适用于什么场合使用、电压放大器原理等等的内容&#xff0c;虽然电压放大器使用的人群很多&#xff0c;但是还是有不少新手工程师对于电压放大器一知半解。今天安泰电子就来为大家介绍电压放大器的原理以及应用场合。 电压…

redis之变慢了该如何排查?

写在前面 不管什么工具&#xff0c;会使用永远只是第一步&#xff0c;第二步是当其出现某些问题时&#xff0c;拥有排查和修复问题的能力&#xff0c;而我们在使用Redis的过程中&#xff0c;变慢就是其中一个比较棘手的问题&#xff0c;因此本文就一起来看下&#xff0c;当遇到…

STM32实现0.96寸OLED显示模拟IIC和IIC四种实现(标准库和HAL库)

目录 本文通过四种方法实现OLED显示 设备选择 OLED介绍 接线表设计 OLED应用 1.标准库模拟IIC实现OLED显示 2.标准库IIC实现OLED显示 3.HAL库模拟IIC实现OLED显示 4.HAL库IIC实现OLED显示 实现效果 代码下载 本文通过四种方法实现OLED显示 设备选择 1.单片机&#…

数字电路中的基础电路结构

基本单元&#xff1a; 1.1 与非门 1.2 或非门 2输入与非门需要4个晶体管&#xff08;n输入与非门需要2xn个晶体管&#xff09;&#xff0c;非门需要两个晶体管&#xff0c;2输入或非门需要6个晶体管&#xff08;n输入或非门需要 2xn 2个晶体管&#xff09;。 静态存储器 1bi…

用 Java 的 IO 流进行读写文件操作

前言 在计算机领域里 IO&#xff0c;有时也写作 I/O&#xff0c;是Input / Output的缩写&#xff0c;也就是输入和输出。这里的输入和输出是指不同系统之间的数据输入和输出&#xff0c;比如读写文件数据&#xff0c;读写网络数据等等。 本文内容大纲如下: Java 有哪些IO框…

数据结构【AVL树模拟实现】

目录 AVL树概念 AVL树结构 insert AVL树的旋转 新节点插入较高右子树的右侧---右右&#xff1a;左单旋 新节点插入较高左子树的左侧---左左&#xff1a;右单旋 新节点插入较高左子树的右侧---左右&#xff1a;先左单旋再右单旋 新节点插入较高右子树的左侧---右左&…

Bug解决:出现C++:internal compiler error: killed(program cc1plus)

最近在学习hyperscan过程中&#xff0c;安装的过程总是会出现 C&#xff1a;internal compiler error: killed(program cc1plus) 反复查找之后既不是版本问题也不是依赖问题&#xff0c;查阅了很多解决方案后&#xff0c;确认是交换空间不足&#xff0c;所以我们解决的方法是临…

Kotlin 开发Android app(七)上:Kotlin函数fun

对于函数来说&#xff0c;现在的语言越来越想把它往变量上靠。 确实对于函数来说&#xff0c;他应该有很多变量的特性。 在Kotlin 中&#xff0c;定义函数是很简单的一件事情&#xff0c;我觉得编程有的时候是被一些语言给高复杂了&#xff0c;命名很简单的一些事情&#xff0…

matlab绘图

clear a-2:0.1:2; b-3:0.1:3; [x,y]meshgrid(a,b); z(1-(x.2)/4-(y.2)/9).^(1/2); mesh(x,y,z) hold on mesh(x,y,-z) clear a-1:0.1:1; b-2:0.1:2; [x,y]meshgrid(a,b); z(4/9)*(x.2)(y.2); mesh(x,y,z)

运维监控系统 PIGOSS BSM 拓扑自动发现原理

PIGOSS BSM提供了自动发现拓扑功能&#xff0c;能够发现全网拓扑、指定网段拓扑、路由拓扑&#xff0c;能够自动关联系统已经监控的设备的状态在拓扑图上实时显示。在做全网发现的时候&#xff0c;可以指定网段或起始路由器&#xff0c;并设定全网的snmp配置参数后&#xff0c;…

vue 使用webpack打包,出现路径404 ,导致白屏webpack-bundle-analyzer使用

使用webpack打包时&#xff0c;遇到两个问题&#xff0c;导致页面出现白屏 一个是cdn对于静态文件限制大小&#xff0c;不能大于2MB&#xff0c;超过这个大小后&#xff0c;就不能上传cdn成功&#xff0c;导致页面加载时&#xff0c;长时间白屏&#xff0c;且找不到资源&#x…

INTERSPEECH 2022|FS-CANet: 基于全带子带交叉注意力机制的语音增强

INTERSPEECH 2022 FS-CANet: 基于全带子带交叉注意力机制的语音增强 本文由清华大学与腾讯天籁实验室、香港中文大学合作&#xff0c;提出了一个全带-子带交叉注意力&#xff08;FSCA&#xff09;模块来交互融合全局信息和局部信息&#xff0c;并将其应用于FullSubNet&#…

Dubbo源码(十) 与Spring一起学习Dubbo里的Aware

目录 一、Spring 1.BeanNameAware 2. BeanClassLoaderAware 3. ApplicationContextAware 4. EnvironmentAware 5. ApplicationEventPublisherAware 6. aware注入时机 二、Dubbo 1. ExtensionAccessorAware 三、小结 现在很多同行做java开发几年了&#xff0c;被迫停留…

[附源码]java毕业设计竞价拍卖系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…