机器学习笔记 五:逻辑回归(Logistics Regression)及两个分类案例

2023-05-16

目录

      • 1. 前言
      • 2. 实现过程
        • 2.1 数据可视化过程
        • 2.2 Sigmoid函数
        • 2.3 代价函数(costFunction)
        • 2.4 其他设置
        • 2.5 梯度下降函数
          • 2.5.1 梯度下降结果(初始参数为0):
          • 2.5.2 SciPy's truncated newton(TNC)寻找最优参数:
          • 2.5.3 代价计算:
        • 2.6 精度函数
      • 3. 逻辑回归实现
      • 4. 正则化逻辑回归实现(减少过拟合,提高泛化能力)
        • 4.1 正则化函数:
      • 5. 正则化完整实现

1. 前言

    今天学习了吴恩达机器学习的逻辑回归部分,逻辑回归属于分类问题(classification),这里主要是考虑有sigmoid函数(也叫做Logistic函数)。
    这里我主要是介绍一些逻辑回归函数的实现过程。首先,我的数据来源于吴恩达机器学习数据集(学生录取成绩数据,含标签label(0,1))。设想你是大学相关部分的管理者,想通过申请学生两次测试的评分,来决定他们是否被录取。现在你拥有之前申请学生的可以用于训练逻辑回归的训练样本集。对于每一个训练样本,你有他们两次测试的评分和最后是被录取的结果,通过逻辑回归的方式来对其他学生的成绩进行预测。

2. 实现过程

2.1 数据可视化过程

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

path = r'C:\Users\Administrator\Desktop\logisticRegression_1.txt' # 对样本1进行训练
data = pd.read_csv(path, header=None, names=['Exam 1', 'Exam 2', 'Admitted'])
data.head()

在这里插入图片描述

positive = data[data['Admitted'].isin([1])] # .isin是pandas中DataFrame的布尔索引,可以用满足布尔条件的列值来‘过滤数据’
negative = data[data['Admitted'].isin([0])]

fig, ax = plt.subplots(figsize=(8,5)) # 产生空白画布,设置画布大小
ax.scatter(positive['Exam 1'], positive['Exam 2'], s=50, c='b', marker='o', label='Admitted') # 列表;s:size;蓝色;
ax.scatter(negative['Exam 1'], negative['Exam 2'], s=50, c='r', marker='x', label='Not Admitted') #红色
ax.legend() # legend n.(图片或地图的)文字说明,图例
ax.set_xlabel('Exam 1 Score')
ax.set_ylabel('Exam 2 Score')
plt.show()

在这里插入图片描述

2.2 Sigmoid函数

在这里插入图片描述

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

nums = np.arange(-10, 10, step=1)

# plt.subplots()创建一个画像(figure)和一组子图(subplots);
# 返回一个Figure实例fig和一个AcesSubplot实例ax;
# flg代表整个图像,ax代表坐标轴和画的图。
fig, ax = plt.subplots(figsize=(8,5))
ax.plot(nums, sigmoid(nums), 'r')
plt.show()

在这里插入图片描述

2.3 代价函数(costFunction)

在这里插入图片描述

# costFunction定义
def cost(theta, X, y):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)
    first = np.multiply(-y, np.log(sigmoid(X * theta.T)))
    second = np.multiply((1 - y), np.log(1 - sigmoid(X * theta.T)))
    return np.sum(first - second) / (len(X))

2.4 其他设置

# 添加1列数据x0
data.insert(0, 'Ones', 1)

# 设置X和y数据
cols = data.shape[1]         # 1表示列,矩阵的第二维
X = data.iloc[:,0:cols-1]
y = data.iloc[:,cols-1:cols] # 取出最后一列数据

# 将数值转换为数组格式,并初始化theta值
X = np.array(X.values)
y = np.array(y.values)
theta = np.zeros(3)

代价计算:

cost(theta, X, y)

0.6931471805599453(效果不错)

2.5 梯度下降函数

在这里插入图片描述注意:我们实际上没有在这个函数中执行梯度下降,我们仅仅在计算一个梯度步长。这是一个优化的过程,就像Octave中的 fminunc() 函数一样,寻找最优的成本和梯度参数。而在Python中,可以用SciPyoptimize 命名空间来做同样的事情。

def gradient(theta, X, y):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)
    
    parameters = int(theta.ravel().shape[1])
    grad = np.zeros(parameters)
    
    error = sigmoid(X * theta.T) - y
    
    for i in range(parameters):
        term = np.multiply(error, X[:,i])
        grad[i] = np.sum(term) / len(X)
    
    return grad

此处的代码,我还没有完全弄明白,还需要继续学习相关的优化算法,之后再回过头来思考!!!

2.5.1 梯度下降结果(初始参数为0):
gradient(theta, X, y)

array([ -0.1 , -12.00921659, -11.26284221])

2.5.2 SciPy’s truncated newton(TNC)寻找最优参数:
import scipy.optimize as opt
result = opt.fmin_tnc(func=cost, x0=theta, fprime=gradient, args=(X, y))
result

(array([-25.16131863, 0.20623159, 0.20147149]), 36, 0)

2.5.3 代价计算:
cost(result[0], X, y)

0.20349770158947458(比之前计算的代价值更好,达到了优化算法的目的)

2.6 精度函数

def predict(theta, X):
    probability = sigmoid(X * theta.T)
    return [1 if x >= 0.5 else 0 for x in probability]

theta_min = np.matrix(result[0])
predictions = predict(theta_min, X)
correct = [1 if ((a == 1 and b == 1) or (a == 0 and b == 0)) else 0 for (a, b) in zip(predictions, y)]
accuracy = (sum(map(int, correct)) % len(correct))
print ('accuracy = {0}%'.format(accuracy))

accuracy = 89%(效果不错,但是可能会高于真实值)

3. 逻辑回归实现

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math

# OrderedDict实现了对字典对象中元素的排序;
# 普通的字典,传入的顺序不一样,但是依然是相同的字典(输出一样);
# orderedDict字典,传入的顺序不一样,那么得到的字典是不一样的(按照输入的顺序进行排列)。
from collections import OrderedDict 


# 1.数据导入
def inputData():
    data = pd.read_csv('C:\\Users\\Administrator\\Desktop\\logisticRegression_1.txt'
                ,dtype={0:float,1:float,2:int}) 
    data.insert(0,"one",[1 for i in range(0,data.shape[0])]) #插入全为1的列,即theta0用于矩阵线性计算
    # 读取X和y
    # iloc():前面的冒号是取行数,后面的冒号是取列数,
    X=data.iloc[:,0:3].values  # 取.txt文件取每行的前 3 列
    y=data.iloc[:,3].values    # 取.txt文件的第 3 列
    y=y.reshape(y.shape[0],1)  # shape():查看数据有多少行多少列,0表示行数,1表示列数
                               # reshape():数组array中的方法,将数据重构
    return X,y


# 2.数据可视化
def showData(X,y):
    for i in range(0, X.shape[0]):  # range(start, stop, step);开始值默认为0;左闭右开;
        if(y[i,0]==1):
            plt.scatter(X[i,1],X[i,2],marker='o', s=50, c='b',label='Admitted')
        elif(y[i,0]==0):
            plt.scatter(X[i,1],X[i,2],marker='x', s=50, c='r',label='Not admitted')
    #设置坐标轴和图例
    plt.xticks(np.arange(30,110,10)) # 步长为10
    plt.yticks(np.arange(30,110,10))
    plt.xlabel('Exam 1 score')
    plt.ylabel('Exam 2 score')
    #因为上面绘制的散点不做处理的话,会有很多重复标签
    #因此这里导入一个集合类消除重复的标签
    handles, labels = plt.gca().get_legend_handles_labels()     # 获得标签,gca:Get Current Axes
    by_label = OrderedDict(zip(labels, handles))                # 通过集合来删除重复的标签
    plt.legend(by_label.values(), by_label.keys())              # 显示图例
    plt.show()

    
# 3.sigmoid函数
def sigmoid(z):
    return 1/(1+np.exp(-z))


# 4.代价函数
def showCostsJ(X,y,theta,m):
    # 式子中加了1e-6次方是为了扩大精度,防止出现除0的警告!!!
    # X @ theta与X.dot(theta)等价,X*theta
    costsJ = ((y*np.log(sigmoid(X@theta)+ 1e-6))+((1-y)*np.log(1-sigmoid(X@theta)+ 1e-6))).sum()/(-m)
    return costsJ


# 5.梯度下降函数
def gradientDescent(X,y,theta,m,alpha,iterations):
    for i in range(0,iterations): 
        ys=sigmoid(X@theta)-y
        temp0=theta[0][0]-alpha*(ys*(X[:,0].reshape(X.shape[0],1))).sum()  #注意这里一定要将X[:,1]reshape成向量
        temp1=theta[1][0]-alpha*(ys*(X[:,1].reshape(X.shape[0],1))).sum()
        temp2=theta[2][0]-alpha*(ys*(X[:,2].reshape(X.shape[0],1))).sum()
        theta[0][0]=temp0          #进行同步更新θ0和θ1和θ2
        theta[1][0]=temp1
        theta[2][0]=temp2

        # 使用X.T@ys可以替代掉之前的同步更新方式,更简洁
        # theta=theta-alpha*(X.T@ys)/m
        
    return theta


# 6.决策边界可视化函数
def evaluateLogisticRegression(X,y,theta):
    # 与数据可视化函数相同
    for i in range(0,X.shape[0]):
        if(y[i,0]==1):
            plt.scatter(X[i,1],X[i,2],marker='o', s=50, c='b',label='Admitted')
        elif(y[i,0]==0):
            plt.scatter(X[i,1],X[i,2],marker='x', s=50, c='r',label='Not admitted')
    plt.xticks(np.arange(30,110,10))
    plt.yticks(np.arange(30,110,10))
    plt.xlabel('Exam 1 score')
    plt.ylabel('Exam 2 score')
    handles, labels = plt.gca().get_legend_handles_labels()
    by_label = OrderedDict(zip(labels, handles))
    plt.legend(by_label.values(), by_label.keys())

    minX=np.min(X[:,1])         #取得x1中的最小值
    maxX=np.max(X[:,1])         #取得x1中的最大值
    xx=np.linspace(minX,maxX,100)   #创建等间距的数100个
    yy=(theta[0][0]+theta[1][0]*xx)/(-theta[2][0])      #绘制决策边界
    plt.plot(xx,yy)
    plt.show()

    
# 7.准确率函数
def judge(X,y,theta):
    ys=sigmoid(X@theta)         #根据假设函数计算预测值ys
    yanswer=y-ys                #使用真实值y-预测值ys
    yanswer=np.abs(yanswer)     #对yanswer取绝对值
    print('accuary:',(yanswer<0.5).sum()/y.shape[0]*100,'%')   #计算准确率并打印结果


X,y = inputData()           #输入数据   
theta=np.zeros((3,1))       #初始化theta数组
alpha=0.0002                 #设定alpha值
iterations=200000            #设定迭代次数
theta=gradientDescent(X,y,theta,X.shape[0],alpha,iterations)        #进行梯度下降
judge(X,y,theta)            #计算准确率
evaluateLogisticRegression(X,y,theta)  

accuary: 91.91919191919192 %
在这里插入图片描述

4. 正则化逻辑回归实现(减少过拟合,提高泛化能力)

当特征值features过多,且数据量少于特征值时,将会出现过拟合的情况,过拟合的泛化效果不好,不能应用于其他的预测项目中,所以需要进行调整,主要包括两种方法:

  • 1.减少特征值的个数;
  • 2.正则化(regularization);

正则化就是保证特征数量不变的情况下,减小特征值的大小或者量级,即对特征值进行相应的惩罚,其中包括:lamda(正则参数 regularization parameter)。
在这里插入图片描述

图一表示欠拟合,图二是合适的分类结果,图三为过拟合的情况。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.optimize as opt

# 对样本2进行训练
# 数据读取
path = r'C:\Users\Administrator\Desktop\logisticRegression_2.txt' 
data2 = pd.read_csv(path, header=None, names=['Test 1', 'Test 2', 'Accepted'])
data2.head()

# 数据可视化
positive = data2[data2['Accepted'].isin([1])]
negative = data2[data2['Accepted'].isin([0])]

fig, ax = plt.subplots(figsize=(8,5))
ax.scatter(positive['Test 1'], positive['Test 2'], s=50, c='b', marker='o', label='Accepted')
ax.scatter(negative['Test 1'], negative['Test 2'], s=50, c='r', marker='x', label='Rejected')
ax.legend()
ax.set_xlabel('Test 1 Score')
ax.set_ylabel('Test 2 Score')
plt.show()

在这里插入图片描述

# 创建新的多项式特征theta,一共10个theta
degree = 5
x1 = data2['Test 1']
x2 = data2['Test 2']

data2.insert(3, 'Ones', 1)

for i in range(1, degree):
    for j in range(0, i):
        data2['F' + str(i) + str(j)] = np.power(x1, i-j) * np.power(x2, j)

data2.drop('Test 1', axis=1, inplace=True)
data2.drop('Test 2', axis=1, inplace=True)

data2.head()

在这里插入图片描述

4.1 正则化函数:

在这里插入图片描述实行过程:

# 正则化代价函数
def costReg(theta, X, y, learningRate):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)
    first = np.multiply(-y, np.log(sigmoid(X * theta.T)))
    second = np.multiply((1 - y), np.log(1 - sigmoid(X * theta.T)))
    reg = (learningRate / (2 * len(X))) * np.sum(np.power(theta[:,1:theta.shape[1]], 2))
    return np.sum(first - second) / len(X) + reg

吴恩达老师讲到的正则化原理,其中分为两部分,theta0不需要进行正则化:
在这里插入图片描述

def gradientReg(theta, X, y, learningRate):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)
    
    parameters = int(theta.ravel().shape[1])
    grad = np.zeros(parameters)
    
    error = sigmoid(X * theta.T) - y
    
    for i in range(parameters):
        term = np.multiply(error, X[:,i])
        
        if (i == 0):
            grad[i] = np.sum(term) / len(X)
        else:
            grad[i] = (np.sum(term) / len(X)) + ((learningRate / len(X)) * theta[:,i])
    
    return grad

5. 正则化完整实现

在这里插入图片描述

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from collections import OrderedDict

#用于导入数据的函数
def inputData():
    #从txt文件中导入数据,注意最好标明数据的类型
    data=pd.read_csv('C:\\Users\\Administrator\\Desktop\\logisticRegression_2.txt'
                ,dtype={0:float,1:float,2:int})
    #插入一列全为1的列
    data.insert(0,"ones",np.ones((data.shape[0],1)))
    #分别取出X和y
    X=data.iloc[:,0:3]
    X=X.values
    y=data.iloc[:,3]
    y=(y.values).reshape(y.shape[0],1)
    return X,y

#用于最开始进行数据可视化的函数
def showData(X,y):
    #分开考虑真实值y是1和0的行,分别绘制散点,并注意使用不同的label和marker
    for i in range(0,X.shape[0]):
        if(y[i][0]==1):
            plt.scatter(X[i,1],X[i,2],marker='o', s=50, c='b',label='y=1')
        else:
            plt.scatter(X[i,1],X[i,2],marker='x', s=50, c='r',label='y=0')
    #设置坐标轴和图例
    plt.xticks(np.arange(-1,1.5,0.5))
    plt.yticks(np.arange(-0.8,1.2,0.2))
    plt.xlabel('Microchip Test 1')
    plt.ylabel('Microchip Test 2')
    #因为上面绘制的散点不做处理的话,会有很多重复标签
    #因此这里导入一个集合类消除重复的标签
    handles, labels = plt.gca().get_legend_handles_labels()     #获得标签
    by_label = OrderedDict(zip(labels, handles))                #通过集合来删除重复的标签
    plt.legend(by_label.values(), by_label.keys())              #显示图例
    plt.show()

#定义sigmoid函数
def sigmoid(z):
    return 1/(1+np.exp(-z))

#计算代价值的函数
def computeCostsJ(X,y,theta,lamda,m):
    #根据吴恩达老师上课讲的公式进行书写
    hx=sigmoid(X@theta)
    costsJ=-(np.sum(y*np.log(hx)+(1-y)*np.log(1-hx)))/m+lamda*np.sum(np.power(theta,2))/(2*m)
    return costsJ

#进行特征映射
def featureMapping(x1,x2,level):
    answer = {}         #定义一个字典
    for i in range(1,level+1):      #外层循环,映射的阶数
        for j  in range(0,i+1):     #内存循环,x1的次数
            answer['F{}{}'.format(i-j,j)]=np.power(x1,i-j)*np.power(x2,j)    #形成字典中的key-value   
    answer = pd.DataFrame(answer)       #转换为一个dataframe
    answer.insert(0,"ones",np.ones((answer.shape[0],1)))        #插入第一列全1
    return answer.values

#进行梯度下降的函数
def gradientDescent(X,y,theta,alpha,iterations,m,lamda):
    for i in range(0,iterations+1):
        hx=sigmoid(X@theta)
        temp0=theta[0][0]-alpha*np.sum(hx-y)/m          #因为x0是不需要进行正则化的,因此需要单独计算
        theta=theta-alpha*(X.T@(hx-y)+lamda*theta)/m    #根据公式进行同步更新theta
        theta[0][0]=temp0                           #单独修改theta0
    return theta

#利用训练集数据判断准确率的函数
def judge(X,y,theta):
    ys=sigmoid(X@theta)         #根据假设函数计算预测值ys
    yanswer=y-ys                #使用真实值y-预测值ys
    yanswer=np.abs(yanswer)     #对yanswer取绝对值
    print('accuary',(yanswer<0.5).sum()/y.shape[0]*100,'%')    #计算准确率并打印结果

#对决策边界进行可视化的函数
def evaluateLogisticRegression(X,y,theta):
    #这里和上面进行数据可视化的函数步骤是一样的,就不重复阐述了
    for i in range(0,X.shape[0]):
        if(y[i][0]==1):
            plt.scatter(X[i,1],X[i,2],marker='o', s=50, c='b',label='y=1')
        else:
            plt.scatter(X[i,1],X[i,2],marker='x', s=50, c='r',label='y=0')
    plt.xticks(np.arange(-1,1.5,0.5))
    plt.yticks(np.arange(-0.8,1.2,0.2))
    plt.xlabel('Microchip Test 1')
    plt.ylabel('Microchip Test 2')
    handles, labels = plt.gca().get_legend_handles_labels()
    by_label = OrderedDict(zip(labels, handles))
    plt.legend(by_label.values(), by_label.keys())
    
    #通过绘制等高线图来绘制决策边界
    x=np.linspace(-1,1.5,250)       #创建一个从-1到1.5的等间距的数
    xx,yy = np.meshgrid(x,x)        #形成一个250*250的网格,xx和yy分别对应x值和y值
    #利用ravel()函数将xx和yy变成一个向量,也就是62500*1的向量
    answerMapping=featureMapping(xx.ravel(),yy.ravel(),6)   #进行特征映射
    answer=answerMapping@theta      #代入映射后的数据进行计算预测值
    answer=answer.reshape(xx.shape) #将answer换成一样格式
    plt.contour(xx,yy,answer,0)     #绘制等高线图,0代表绘制第一条等高线
    plt.show()


X,y = inputData()       #导入数据
theta=np.zeros((28,1))      #初始化theta数组
iterations=200000       #定义迭代次数
alpha=0.001             #定义alpha值
lamda=50             #定义lamda
mappingX = featureMapping(X[:,1],X[:,2],6)      #进行特征映射
theta=gradientDescent(mappingX,y,theta,alpha,iterations,X.shape[0],lamda)   #进行正则化的梯度下降
judge(mappingX,y,theta)         #计算预测的准确率
evaluateLogisticRegression(X,y,theta)       #绘制决策边界

accuary 65.8119658119658 %

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习笔记 五:逻辑回归(Logistics Regression)及两个分类案例 的相关文章

  • WebService的简单案例记录(Java)

    关于WebService xff0c 工作关系 xff0c 断断续续有接触到一些 xff0c 写完就忘 xff0c 下次要写又不记得 所以做个简单的案例 xff0c 啥时候忘了能查一查 酱紫 xff0c 先大概讲一下我理解的WebServi
  • 阿里云使用之ECS安全组

    ECS是什么 云服务器 ECS是阿里云提供的云服务器 xff0c 是一种弹性可伸缩的计算服务 xff0c 助您降低 IT 成本 xff0c 提升运维效率 xff0c 使您更专注于核心业务创新 防火墙的痛点 由于使用了云服务 xff0c 随着
  • 在linux上安装CMake

    在linux上安装CMake 一 下载CMake安装包二 配置环境变量三 验证是否能执行CMake四 CMake官方文档 一 下载CMake安装包 本文演示环境为Linux系统 xff0c Redhat7 64位 CMake提供了两种安装方
  • Microsoft 365 E5 开发者如何添加新用户

    Microsoft 365 E5 开发者如何添加新用户 登录进入Microsoft 365 管理员中心 https admin microsoft com Adminportal Home source 61 applauncher hom
  • C++程序设计之兼谈对象模型

    前言 应具备的基础 是上一篇博文 面向对象程序设计 的续集本文将探讨上文未讨论的主题 目标 在先前培养正规 大器的编程素养上 xff0c 继续探讨更多技术 泛型编程 Generic Programming 和面向对象编程 Object Or
  • ImageMagick:png序列转gif(适合处理带透明度的图片)

    最近需要将几组png序列转成gif xff0c 之前有用过 Ulead GIF Animator 和 Photoshop xff0c Ulead GIF Animator 只有windows版 xff0c 这些年mac是主力机 xff0c
  • python爬虫学习:tesseract之实现图片里文字的识别

    目录 1 Tesseract基础1 1 Tesseract简介1 2 Tesseract安装1 3 Tesseract使用1 4 下载语言库 2 Tesseract在Python中的使用 1 Tesseract基础 1 1 Tesserac
  • VS2015 error MSB8020: The build tools for xxx

    问题 VS2015 error MSB8020 The build tools for xxx 问题截图 xff1a 解决方案 xff1a 平台工具集版本不正确 xff0c 更正一下即可 解决方案右键项目属性 gt gt 配置属性 gt g
  • FFmpeg 视频编码--------把 .rgb 变成 .mp4

    FFmpeg 视频编码 一 什么是视频编码 xff1f 视频编码的主要作用是将视频像素数据 xff08 RGB xff0c YUV等 xff09 压缩成为视频码流 xff0c 从而降低视频的数据量 如果视频不经过压缩编码的话 xff0c 体
  • ubuntu设置代理 的三种方式

    转载自 xff1a http www cnblogs com lexus archive 2012 02 20 2359229 html ubuntu下设置代理 2010 01 11 20 13 20 分类 xff1a ubuntu总结 标
  • win10 + WDK10+ VS2015 + vmware_win10 驱动开发环境配置

    自从WDK8 1后 xff0c 开发window 驱动不用再用windbg 43 虚拟机调试了 xff0c 我们调试驱动也可以像调试EXE 一样方便 xff0c 下面是win10 主机 43 WDK10 43 VS2015 43 vmwar
  • VS Code搭建PyQt5开发环境

    前言 二 PyQt5相关模块下载 1 利用Python的pip安装PyQt5和PyQt5 tools扩展包 2 VS code中安装PyQt Integration和Qt for Python 3 VS code中配置Qt designer
  • 解密微信电脑版image文件夹下缓存的用户图片

    我们的微信体积越来越大 xff0c 该怎样查看 xff1f 该怎样为其减肥哪 xff1f 重点来了 在微信缓存中 FileStorage 文件夹时发现了其目录下的 Image 文件夹 xff0c 可能是使用过程中缓存的聊天图片等 xff0c
  • 怎么寻找微信撤回的图片

    1 回顾 自从发布文章 寻找微信撤回的图片 之后 xff0c 骗了不少粉啊 总之 xff0c 之前提出了一种可以找到微信撤回图片的方法 2 真相 之前的说法是 xff0c 工程师并没有真正把撤回的图片删除 xff0c 而是加密后藏起来了 其
  • 电脑端微信文件的存储位置在哪?

    在微信聊天中会产生很多文件 xff0c 首先微信的文件存放位置 xff1a 默认情况下 c users administrator document wechat files xxx 以下所有文件截图都是从这个父级目录开始的 示例图 Bac
  • 微信的dat文件正确打开方式及问题处理

    微信的dat文件是微信用于缓存PC端微信的图片 xff0c 然后对图片进行了加密的处理 所以是可以删除的 xff0c 有些朋友data文件夹下有十几G的 xff0c 都是可以删除的 xff0c 但是最好确保这些文件都已经没有用处了再进行删除
  • 微信中的dat文件到底是什么

    微信dat文件是表示电脑上微信聊天记录数据文件 xff0c 可以选择删除 虽然删除这些文件并不会影响微信的正常使用 xff0c 但是如果需保留电脑端微信的聊天记录 xff0c 重要的材料则不要删除 微信 xff08 WeChat xff09
  • 2022年2月11日

    P3375 模板 KMP字符串匹配 题目描述 给出两个字符串 s 1s1 和 s 2s2 xff0c 若 s 1s1 的区间 l r l r 子串与 s 2s2 完全相同 xff0c 则称 s 2s2 在 s 1s1 中出现了 xff0c
  • 网易云音乐NCM格式转化为mp3

    前段时间帮朋友下歌放在车上听 结果好多都是ncm格式 xff0c 伤心 xff0c 搜索了下发现基本上这格式解密有好多昂 xff0c 可惜UI我都不太想要 决定抄一下 xff0c 自己做一个 这里先记录下核心代码 xff0c 回头补充个UI
  • 旧电脑怎么升级到新版Win10

    Windows 10 2020年5月更新是最新版的win10系统 xff0c 相比以往的win10有了许多的改进 xff0c 比如说新的Cortana应用 云端重置以及Linux 2的Windows子系统等等 而Windows搜索的改进 x

随机推荐

  • K12教育小初高各个版本教材内的章节数据

    一个 相对 权威的资源网站 xff0c 然后把这个网站上的所有章节 教材全部爬下来 xff0c 进行保存数据库 xff0c 用于我们后续教学方面的基础数据 先说下结果 xff1a 算上小学 初中 高中三个学段 xff0c 所有学科下共计51
  • 1-FreeSwitch-CentOS7安装freeswitch1.10.2

    文章目录 一 前言二 安装2 1 安装 96 96 96 noarch 96 96 96 2 2 96 96 96 处理安装源 96 96 96 2 3 安装 96 96 96 cmake 96 96 96 2 4 安装 96 96 96
  • 「Python语法结构」输出语句示例(1)

    打印 玩具列表 字符串 功能要求 在屏幕上打印出 玩具列表 这样 实例代码 print 39 玩具列表 39 print 34 玩具列表 34 print 39 39 39 玩具列表 39 39 39 print 34 34 34 玩具列表
  • wsl导致vmmem占用高解决办法

    自从装了wsl我这个年迈的电脑就更加吃力 xff0c 尤其是内存基本上都要占到90 以上 xff0c 打开任务管理器一看内存一半以上都是被vmmem吃掉了 xff0c 于是在网上寻找解决办法 xff0c 并记录优化过程 文章目录 定期执行缓
  • wsl配置java环境以及使用vscode调试

    记录如何在wsl中配置java编译环境 xff0c 以及如何使用vscode进行编译调试 文章目录 下载jdk下载maven配置环境变量使用vscode调试java 下载jdk 点击进入到oracle jdk的下载页面 选择合适的安装包 解
  • python pip 打包指南

    一个成功的开源项目的其核心功能是打包功能 xff0c 而出色的打包功能的关键在于版本控制 因为项目是开源的 xff0c 所以您希望发布的包能够体现出开源社区所具备的优点 不同的平台与语言具有不同的打包机制 xff0c 本文主要讲述的是 Py
  • 虚拟机安装WIN系统后无法启动

    在虚拟机里安装完WINDOWS操作系统后 xff0c 无法启动 xff08 当然是GHOST版本 xff09 xff0c 启动时提示 xff1a Network boot from AMD Am79C970A Copright c 2003
  • VMware Esxi 8.0 直通Nvidia P40显卡

    目录 一 前言 二 错误信息 三 解决过程 一 前言 接到一个客户需求 xff0c 想在Esxi上直通Nvidia P40显卡 xff0c 直通后无法打开虚拟机 二 错误信息 下图是错误信息 xff0c 如图所示 xff0c 任务名称 打开
  • iOS 不规则瀑布流

    iOS 自从出了UICollectionview之后 界面的样式可谓更加的多元化 对于一些较为复杂的界面UICollectionview都可以相对轻松的实现 而且由于其 FlowLayout 子类的存在 界面的布局更可谓是随心所欲 下面就来
  • php7.4 docker 安装mongodb扩展

    Dockerfile 下面的pecl install mongodb的就是安装命令 FROM php 7 4 12 fpm RUN mv etc apt sources list etc apt sources list bak COPY
  • linux下wireshark安装和使用

    Wireshark是世界上最流行的网络分析工具 这个强大的工具可以捕捉网络中的数据 xff0c 并为用户提供关于网络和上层协议的各种信息 与很多其他网络工具一样 xff0c Wireshark也使用pcap network library来
  • HDU3700 Cat 恶心模拟题

    Problem Address xff1a http acm hdu edu cn showproblem php pid 61 3700 前言 终于又A了一道恶心的模拟题 看来HDU恶心题还是蛮多的 思路 扫描一遍 xff0c 如果有时间
  • Linux Docker最简单有效设置mysql 编码为utf8mb4解决乱码(三条命令解决)

    非常之简单高效 xff01 xff01 xff01 编辑my cnf span class token function vi span my cnf span class token comment 然后粘贴下面的并保存 span mys
  • 安利一款开源(3w star)的ssh、shell、cmd、sftp软件tabby(功能多、美观好用、支持插件)

    github地址 xff1a Tabby 官网 xff1a Tabby sh 用了之后非常之喜爱 xff0c 给作者点了个start xff0c 大家一起给这样的好开源软件点星星 自定义登录后脚本 对自己的配置可以设置快捷键快速打开一个该配
  • 远程控制ubuntu10.04

    由非linux平台连接到linux box有很多种方法 ubuntu本身就提供了XDMP VNC xff0c RDP等远程桌面登陆的方式 这些方式的实现比较简单 xff0c 没有使用多少数据压缩的技术 xff0c 因而远程时会感到比较慢 x
  • win10无线网卡共享网络给有线网卡再共享给其他电脑

    背景 xff1a 因项目主机为只有有线网卡的Linux系统 xff0c 需要联网安装一些程序 xff0c 需要win10的笔记本共享网络给项目主机 xff0c 但是调试环境下笔记本又只有连接手机热点的无线网络 xff0c 需要实现 笔记本无
  • 【解决错误】ModuleNotFoundError: No module named ‘PIL‘

    一 报错 Traceback span class token punctuation span most recent call last span class token punctuation span span class toke
  • 树莓派VNC配置教程

    VNC可以实现连接到树莓派后 xff0c 用电脑直接控制树莓派 xff0c 下面是VNC配置教程 xff1a 首先在电脑端上安装VNC xff08 官网下载地址 xff09 xff1a xff08 选择对应的版本 xff0c 下载安装即可
  • 用VSCode优雅的写MySQL

    一 SQL的部署 首先是部署MySQL xff0c 本地的MySQL在官网上下载包后 xff0c 按照默认的安装即可 xff0c 我使用的腾讯云的 云MySQL xff0c 可以到腾讯云官网租用 在租好数据库后 xff0c 进入控制台 xf
  • 机器学习笔记 五:逻辑回归(Logistics Regression)及两个分类案例

    目录 1 前言2 实现过程2 1 数据可视化过程2 2 Sigmoid函数2 3 代价函数 xff08 costFunction xff09 2 4 其他设置2 5 梯度下降函数2 5 1 梯度下降结果 xff08 初始参数为0 xff09