Python 全栈体系【四阶】(六)
第四章 机器学习
五、线性模型
1. 概述
线性模型是自然界最简单的模型之一,它描述了一个(或多个)自变量对另一个因变量的影响是呈简单的比例、线性关系。例如:
住房每平米单价为 1 万元,100 平米住房价格为 100 万元,120 平米住房为 120 万元;
一台挖掘机每小时挖 100 m 3 100m^3 100m3沙土,工作 4 小时可以挖掘 400 m 3 400m^3 400m3沙土.。
线性模型在二维空间内表现为一条直线,在三维空间内表现为一个平面,更高维度下的线性模型很难用几何图形来表示(称为超平面)。如下图所示:
二维空间下线性模型表现为一条直线 二维空间下线性模型表现为一条直线 二维空间下线性模型表现为一条直线
三维空间下线性模型表现为一个平面 三维空间下线性模型表现为一个平面 三维空间下线性模型表现为一个平面
线性回归是要根据一组输入值和输出值(称为样本),寻找一个线性模型,能最佳程度上拟合于给定的数值分布,从而再给定新的输入时预测输出.样本如下表所示:
输入(x) | 输出(y) |
---|---|
0.5 | 5.0 |
0.6 | 5.5 |
0.8 | 6.0 |
1.1 | 6.8 |
1.4 | 6.8 |
根据样本拟合的线性模型如下图所示:
2. 线性模型定义
设给定一组属性 x , x = ( x 1 ; x 2 ; . . . ; x n ) x, x=(x_1;x_2;...;x_n) x,x=(x1;x2;...;xn),线性方程的一般表达形式为:
y = w 1 x 1 + w 2 x 2 + w 3 x 3 + . . . + w n x n + b y = w_1x_1 + w_2x_2 + w_3x_3 + ... + w_nx_n + b y=w1x1+w2x2+w3x3+...+wnxn+b
写成向量形式为:
y = w T x + b y = w^Tx + b y=wTx+b
其中, w = ( w 1 ; w 2 ; . . . ; w n ) , x = ( x 1 ; x 2 ; . . . ; x n ) w=(w_1;w_2;...;w_n), x=(x_1;x_2;...;x_n) w=(w1;w2;...;wn),x=(x1;x2;...;xn),w 和 b 经过学习后,模型就可以确定。当自变量数量为 1 时,上述线性模型即为平面下的直线方程:
y = w x + b y=wx+b y=wx+b
线性模型形式简单、易于建模,却蕴含着机器学习中一些重要的基本思想。许多功能强大的非线性模型可以在线性模型基础上引入层级结构或高维映射而得。此外,由于 w w w直观表达了各属性在预测中的重要性,因此线性模型具有很好的可解释性。例如,判断一个西瓜是否为好瓜,可以用如下表达式来判断:
f 好瓜 ( x ) = 0.2 x 色泽 + 0.5 x 根蒂 + 0.3 x 敲声 + 1 f_{好瓜}(x) = 0.2x_{色泽} + 0.5x_{根蒂} + 0.3x_{敲声} + 1 f好瓜(x)=0.2x色泽+0.5x根蒂+0.3x敲声+1
上述公式可以解释为,一个西瓜是否为好瓜,可以通过色泽、根蒂、敲声等因素共同判断,其中根蒂最重要(权重最高),其次是敲声和色泽。
3. 模型训练
在二维平面中,给定两点可以确定一条直线。但在实际工程中,可能有很多个样本点,无法找到一条直线精确穿过所有样本点,只能找到一条与样本”足够接近“或”距离足够小“的直线,近似拟合给定的样本。如下图所示:
如何确定直线到所有样本足够近呢?可以使用损失函数来进行度量。
3.1 损失函数
损失函数用来度量真实值(由样本中给出)和预测值(由模型算出)之间的差异。损失函数值越小,表明模型预测值和真实值之间差异越小,模型性能越好;损失函数值越大,模型预测值和真实值之间差异越大,模型性能越差。在回归问题中,均方差是常用的损失函数,其表达式如下所示:
E = 1 2 ∑ i = 1 n ( y − y ′ ) 2 E = \frac{1}{2}\sum_{i=1}^{n}{(y - y')^2} E=21i=1∑n(y−y′)2
其中,y 为模型预测值,y’为真实值。均方差具有非常好的几何意义,对应着常用的欧几里得距离(简称欧式距离)。线性回归的任务是要寻找最优线性模型,是的损失函数值最小,即:
( w ∗ , b ∗ ) = a r g m i n 1 2 ∑ i = 1 n ( y − y ′ ) 2 = a r g m i n 1 2 ∑ i = 1 n ( y ′ − w x i − b ) 2 (w^*, b^*) = arg min \frac{1}{2}\sum_{i=1}^{n}{(y - y')^2} \\ = arg min \frac{1}{2}\sum_{i=1}^{n}{(y' - wx_i - b)^2} (w∗,b∗)=argmin21i=1∑n(y−y′)2=argmin21i=1∑n(y′−wxi−b)2
基于均方误差最小化来进行模型求解的方法称为“最小二乘法”。线性回归中,最小二乘法就是试图找到一条直线,是所有样本到直线的欧式距离之和最小。可以将损失函数对 w 和 b 分别求导,得到损失函数的导函数,并令导函数为 0 即可得到 w 和 b 的最优解。
PS:机器学习主方向:
-
找到拟合当前数据的最优的模型
-
寻找最优的模型参数
-
使用梯度下降求损失函数的极小值
3.2 梯度下降法
3.2.1 为什么使用梯度下降
在实际计算中,通过最小二乘法求解最优参数有一定的问题:
(1)最小二乘法需要计算逆矩阵,有可能逆矩阵不存在;
(2)当样本特征数量较多时,计算逆矩阵非常耗时甚至不可行。
所以,在实际计算中,通常采用梯度下降法来求解损失函数的极小值,从而找到模型的最优参数。
3.2.2 什么是梯度下降
梯度(gradient)是一个向量(矢量,有方向),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大。损失函数沿梯度相反方向收敛最快(即能最快找到极值点)。当梯度向量为零(或接近于零),说明到达一个极值点,这也是梯度下降算法迭代计算的终止条件。
这种按照负梯度不停地调整函数权值的过程就叫作“梯度下降法”。通过这样的方法,改变权重让损失函数的值下降得更快,进而将值收敛到损失函数的某个极小值。
通过损失函数,我们将“寻找最优参数”问题,转换为了“寻找损失函数最小值”问题。梯度下降法算法描述如下:
(1)损失是否足够小?如果不是,计算损失函数的梯度。
(2)按梯度的反方向走一小步,以缩小损失。
(3)循环到(1)。
梯度下降法中通过沿着梯度负方向不断调整参数,从而逐步接近损失函数极小值所在点。如下图所示:
3.2.3 参数更新法则
在直线方程中,有两个参数需要学习, w 0 w_0 w0和 w 1 w_1 w1,梯度下降过程中,分别对这两个参数单独进行调整,调整法则如下:
w 0 = w 0 + Δ w 0 w 1 = w 1 + Δ w 1 w_0 = w_0 + \Delta w_0\\w_1 = w_1 + \Delta w_1 w0=w0+Δw0w1=w1+Δw1
Δ w 0 \Delta w_0 Δw0和 Δ w 1 \Delta w_1 Δw1可表示为:
Δ w 0 = − η Δ l o s s Δ w 0 Δ w 1 = − η Δ l o s s Δ w 1 \Delta w_0 = -\eta \frac{\Delta loss}{\Delta w_0}\\\Delta w_1 = -\eta \frac{\Delta loss}{\Delta w_1}\\ Δw0=−ηΔw0ΔlossΔw1=−ηΔw1Δloss
其中, η \eta η称为学习率, Δ l o s s Δ w i \frac{\Delta loss}{\Delta w_i} ΔwiΔloss为梯度(即损失函数关于参数 w i w_i wi的偏导数)。损失函数表达式为:
l o s s = 1 2 ∑ ( y − y ′ ) 2 = 1 2 ∑ ( ( y − ( w 0 + w 1 x ) ) 2 ) loss =\frac{1}{2}\sum(y - y')^2 = \frac{1}{2}\sum((y-(w_0+w_1x))^2) loss=21∑(y−y′)2=21∑((y−(w0+w1x))2)
对损失函数求导(求导过程见补充知识),可得 w 0 , w 1 w_0, w_1 w0,w1的偏导数为:
Δ l o s s Δ w 0 = ∑ ( ( y − y ′ ) ( − 1 ) ) = − ∑ ( y − y ′ ) Δ l o s s Δ w 1 = ∑ ( ( y − y ′ ) ( − x ) ) = − ∑ ( x ( y − y ′ ) ) \frac{\Delta loss}{\Delta w_0} = \sum((y - y')(-1)) = -\sum(y - y')\\\frac{\Delta loss}{\Delta w_1} = \sum((y - y')(-x)) = -\sum(x(y - y')) Δw0Δloss=∑((y−y′)(−1))=−∑(y−y′)Δw1Δloss=∑((y−y′)(−x))=−∑(x(y−y′))
PS:超参数
- 在构建模型时,需要设定一系列的参数,而这些参数可以决定模型的精度。超参数的设定一般取决于经验。
4. 实现线性回归
4.1 自己编码实现
以下是实现线性回归的代码:
# 线性回归示例
import numpy as np
import matplotlib.pyplot as mp
from mpl_toolkits.mplot3d import axes3d
import sklearn.preprocessing as sp# 训练数据集
train_x = np.array([0.5, 0.6, 0.8, 1.1, 1.4]) # 输入集
train_y = np.array([5.0, 5.5, 6.0, 6.8, 7.0]) # 输出集n_epochs = 1000 # 迭代次数
lrate = 0.01 # 学习率
epochs = [] # 记录迭代次数
losses = [] # 记录损失值w0, w1 = [1], [1] # 模型初始值for i in range(1, n_epochs + 1):epochs.append(i) # 记录第几次迭代y = w0[-1] + w1[-1] * train_x # 取出最新的w0,w1计算线性方程输出# 损失函数(均方差)loss = (((train_y - y) ** 2).sum()) / 2losses.append(loss) # 记录每次迭代的损失值print("%d: w0=%f, w1=%f, loss=%f" % (i, w0[-1], w1[-1], loss))# 计算w0,w1的偏导数d0 = -(train_y - y).sum()d1 = -(train_x * (train_y - y)).sum()# 更新w0,w1w0.append(w0[-1] - (d0 * lrate))w1.append(w1[-1] - (d1 * lrate))
程序执行结果:
1 w0=1.00000000 w1=1.00000000 loss=44.17500000
2 w0=1.20900000 w1=1.19060000 loss=36.53882794
3 w0=1.39916360 w1=1.36357948 loss=30.23168666
4 w0=1.57220792 w1=1.52054607 loss=25.02222743
5 w0=1.72969350 w1=1.66296078 loss=20.71937337
......
996 w0=4.06506160 w1=2.26409126 loss=0.08743506
997 w0=4.06518850 w1=2.26395572 loss=0.08743162
998 w0=4.06531502 w1=2.26382058 loss=0.08742820
999 w0=4.06544117 w1=2.26368585 loss=0.08742480
1000 w0=4.06556693 w1=2.26355153 loss=0.08742142
可以给数据加上可视化,让结果更直观.添加如下代码:
###################### 训练过程可视化 ######################
# 训练过程可视化
## 损失函数收敛过程
w0 = np.array(w0[:-1])
w1 = np.array(w1[:-1])mp.figure("Losses", facecolor="lightgray") # 创建一个窗体
mp.title("epoch", fontsize=20)
mp.ylabel("loss", fontsize=14)
mp.grid(linestyle=":") # 网格线:虚线
mp.plot(epochs, losses, c="blue", label="loss")
mp.legend() # 图例
mp.tight_layout() # 紧凑格式## 显示模型直线
pred_y = w0[-1] + w1[-1] * train_x # 根据x预测y
mp.figure("Linear Regression", facecolor="lightgray")
mp.title("Linear Regression", fontsize=20)
mp.xlabel("x", fontsize=14)
mp.ylabel("y", fontsize=14)
mp.grid(linestyle=":")
mp.scatter(train_x, train_y, c="blue", label="Traing") # 绘制样本散点图
mp.plot(train_x, pred_y, c="red", label="Regression")
mp.legend()# 显示梯度下降过程(复制粘贴即可,不需要编写)
# 计算损失函数曲面上的点 loss = f(w0, w1)
arr1 = np.linspace(0, 10, 500) # 0~9间产生500个元素的均匀列表
arr2 = np.linspace(0, 3.5, 500) # 0~3.5间产生500个元素的均匀列表grid_w0, grid_w1 = np.meshgrid(arr1, arr2) # 产生二维矩阵flat_w0, flat_w1 = grid_w0.ravel(), grid_w1.ravel() # 二维矩阵扁平化
loss_metrix = train_y.reshape(-1, 1) # 生成误差矩阵(-1,1)表示自动计算维度
outer = np.outer(train_x, flat_w1) # 求外积(train_x和flat_w1元素两两相乘的新矩阵)
# 计算损失:((w0 + w1*x - y)**2)/2
flat_loss = (((flat_w0 + outer - loss_metrix) ** 2).sum(axis=0)) / 2
grid_loss = flat_loss.reshape(grid_w0.shape)mp.figure('Loss Function')
ax = mp.gca(projection='3d')
mp.title('Loss Function', fontsize=14)
ax.set_xlabel('w0', fontsize=14)
ax.set_ylabel('w1', fontsize=14)
ax.set_zlabel('loss', fontsize=14)
ax.plot_surface(grid_w0, grid_w1, grid_loss, rstride=10, cstride=10, cmap='jet')
ax.plot(w0, w1, losses, 'o-', c='orangered', label='BGD', zorder=5)
mp.legend(loc='lower left')mp.show()
数据可视化结果如下图所示:
回归得到的线性模型 回归得到的线性模型 回归得到的线性模型
损失函数收敛过程 损失函数收敛过程 损失函数收敛过程
梯度下降过程 梯度下降过程 梯度下降过程
4.2 通过 sklearn API 实现
同样,可以使用 sklearn 库提供的 API 实现线性回归。代码如下:
# 利用LinearRegression实现线性回归
import numpy as np
import sklearn.linear_model as lm # 线性模型# 线性模型
import sklearn.metrics as sm # 模型性能评价模块
import matplotlib.pyplot as mp
train_x = np.array([[0.5], [0.6], [0.8], [1.1], [1.4]]) # 输入集
train_y = np.array([5.0, 5.5, 6.0, 6.8, 7.0]) # 输出集
# 创建线性回归器
model = lm.LinearRegression()
# 用已知输入、输出数据集训练回归器
model.fit(train_x, train_y)# 输入数据x:必须是二维
# 输出数据y:最好是一维的
# 根据训练模型预测输出
pred_y = model.predict(train_x)print("coef_:", model.coef_) # 系数
print("intercept_:", model.intercept_) # 截距# 可视化回归曲线
mp.figure('Linear Regression', facecolor='lightgray')
mp.title('Linear Regression', fontsize=20)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')# 绘制样本点
mp.scatter(train_x, train_y, c='blue', alpha=0.8, s=60, label='Sample')# 绘制拟合直线
mp.plot(train_x, # x坐标数据pred_y, # y坐标数据c='orangered', label='Regression')mp.legend()
mp.show()
执行结果:
5. 模型评价指标
(1)平均绝对误差(Mean Absolute Deviation):单个观测值与预测值的偏差的绝对值的平均;
(2)均方误差:单个样本到平均值差值的平方平均值;
(3)MAD(中位数绝对偏差):与数据中值绝对偏差的中值;
(4)R2 决定系数:趋向于 1,模型越好;趋向于 0,模型越差。
相关文章:
Python 全栈体系【四阶】(六)
第四章 机器学习 五、线性模型 1. 概述 线性模型是自然界最简单的模型之一,它描述了一个(或多个)自变量对另一个因变量的影响是呈简单的比例、线性关系。例如: 住房每平米单价为 1 万元,100 平米住房价格为 100 万…...
从memcpy()函数中学习函数的设计思想
memcpy()函数:可以理解为内存拷贝。 他的函数定义如下的 my_memcpy()函数相同。 下面这个函数是我的模拟实现,现在让我们一起来学习一下这个函数的设计思想: void * my_memcpy(void * des, const void* src, size_t size) {void * p des;…...
【PostgreSQL】从零开始:(二)PostgreSQL下载与安装
【PostgreSQL】从零开始:(二)PostgreSQL下载与安装 Winodws环境下载与安装PostgreSQL下载PostgreSQL安装PostgreSQL1.登录数据库2.查看下我们已有的数据库 Liunx环境下载与安装PostgreSQL使用YUM下载安装PostgreSQL1.下载PostgreSQL安装包2.安装PostgreS…...
PHP的垃圾回收机制是怎样的?
PHP 使用自动垃圾回收机制来管理内存。PHP 的垃圾回收主要依赖于引用计数和周期性垃圾回收两种策略。 引用计数: PHP 使用引用计数来跟踪变量的引用次数。每当一个变量被引用,其引用计数就增加;每当一个引用被释放,计数就减少。当…...
【数据结构】八大排序之希尔排序算法
🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 一.优化直接插入排序算法 我们在之前对直接插入排序算法的优化部分通过对直接插入排序的分析可以得到一个结论,即: 进行直接插入排序的数组,如果越接近局部有序,则后续进行直…...
NestJS使用gRPC实现微服务通信
代码仓库地址:https://github.com/zeng-jc/rpc-grpc-practice 1.1 基本概念 gRPC 基于 Protocol Buffers(protobuf)作为接口定义语言(IDL),意味着你可以使用 protobuf 来定义你的服务接口,gRP…...
Android手机使用Termux终端模拟器
Termux 是 Android 平台上的一个终端模拟器,可以在 Android 手机上模拟 Linux 环境。它提供命令行界面,并且提供了功能健全的包管理工具(pkg)。另外就是 Termux 不需要 root 权限,安装后默认产生一个用户,可…...
【Linux】cp问题,生产者消费者问题代码实现
文章目录 前言一、 BlockQueue.hpp(阻塞队列)二、main.cpp 前言 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用…...
C++1114新标准——统一初始化(Uniform Initialization)、Initializer_list(初始化列表)、explicit
系列文章目录 C11&14新标准——Variadic templates(数量不定的模板参数) C11&14新标准——Uniform Initialization(统一初始化)、Initializer_list(初始化列表)、explicit 文章目录 系列文章目录1…...
Kubeadm 方式部署K8s集群
环境 主节点CPU核数必须是 ≥2核且内存要求必须≥2G,否则k8s无法启动 主机名地址角色配置kube-master192.168.134.165主节点2核4Gkube-node1192..168.134.166 工作节点2核4Gkube-node2192.168.134.163工作节点2核4G 1.获取镜像 谷歌镜像[由于国内网络原因…...
力扣376周赛
力扣第376场周赛 找出缺失和重复的数字 map模拟 class Solution { public:vector<int> findMissingAndRepeatedValues(vector<vector<int>>& grid) {int n grid.size() , m grid[0].size();map<int,int>mi;for(int i 0 ; i < n ; i ){for…...
SU渲染受到电脑性能影响大吗?如何提高渲染速度
一般3d设计师们在进行设计工作前都需要提供一台高配电脑,那么你这知道su渲染对电脑要求高吗?电脑带不动su怎么解决?su对电脑什么配件要求高?今天这篇文章就详细为大家带来电脑硬件对su建模渲染的影响,以及su渲染慢怎么…...
Docker - Android源码编译与烧写
创建源代码 并挂载到win目录 docker run -v /mnt/f/android8.0:/data/android8.0 -it --name android8.0 49a981f2b85f /bin/bash 使用 docker update 命令动态调整内存限制: 重新运行一个容器 docker run -m 512m my_container 修改运行中容器 显示运行中容器 d…...
股票价格预测 | Python实现基于ARIMA和LSTM的股票预测模型(含XGBoost特征重要性衡量)
文章目录 效果一览文章概述模型描述源码设计效果一览 文章概述 Python实现基于ARIMA和LSTM的股票预测模型(Stock-Prediction) Data ExtractionFormatting data for time seriesFeature engineering(Feature Importance using X...
Base64
1. Base64是什么? Base64(基底64)是一种基于64个可打印字符来表示二进制数据的表示方法。每6个比特为一个单元,对应某个可打印字符。3个字节相当于24个比特,对应于4个Base64单元,即3个字节可由4个可打印字…...
二叉搜索树的简单C++类实现
二叉搜索树(BST)是一种重要的数据结构,它对于理解树的操作和算法至关重要,其中序输出是有序的。本文通过C实现一个BST的类,并在插入和删除节点时提供清晰的输出,可视化这些操作的过程。 二叉搜索树的节点结…...
禁毒知识竞赛流程和规则
禁毒知识竞赛是一项全国性竞赛活动。有着深化全国青少年毒品预防教育,巩固学校毒品预防教育成果的重要作用。本文介绍一场禁毒知识竞赛的完整流程和规则,供单位组织此类活动时参考。 1、赛制 第一轮10进6,第二轮6进4,4支队伍决出…...
CSS 基础
文章目录 CSS 常见的属性CSS 常见样式行内样式内嵌样式导入样式 CSS 选择器标签选择器id选择器类选择器全局选择器属性选择器组合选择器 CSS 常见应用表格列表导航栏下拉菜单提示工具图片廊 CSS (Cascading Style Sheets,层叠样式表),是一种用…...
黑色翻页时钟HTML源码-倒计时单页翻页时钟
黑色翻页时钟HTML源码-倒计时单页翻页时钟这是一个类似fliqlo的黑色翻页时钟HTML源码,它仅包含一个HTML文件,上传到网站后即可使用。该时钟具有查看当前时间、秒表和倒计时功能,并且可以在页面的右下角进行设置。 红色动态炫酷数字时钟html网…...
2043杨辉三角(C语言)
目录 一:题目 二:思路分析 三:代码 一:题目 二:思路分析 1.通过杨辉三角,不难发现中间的数等于肩头两个数之和 2.但是当我们的输出结果,与杨辉三角的形式有所不同,但是我们可以找…...
【机器学习】从底层手写实现线性回归
【机器学习】Building-Linear-Regression-from-Scratch 线性回归 Linear Regression0. 数据的导入与相关预处理0.工具函数1. 批量梯度下降法 Batch Gradient Descent2. 小批量梯度下降法 Mini Batch Gradient Descent(在批量方面进行了改进)3. 自适应梯度…...
判断数组中对象的某个值是否有相同的并去重
如果你想判断数组中对象的某个值是否有相同的,并进行去重,你可以使用 JavaScript 中的一些数组方法和 Set 对象。以下是一个示例: // 原始数组包含对象 const array [{ id: 1, name: John },{ id: 2, name: Jane },{ id: 3, name: Doe },{ …...
Shell脚本 变量 语句 表达式
常见的解释器 #!/bin/sh #不推荐(了解) #!/bin/bash #!/usr/bin/python #!/bin/awk#!后跟的字符表示要启动的程序,该程序读取该文件执行。 #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行shell 函数 myShellName () {command1 }函数调用…...
MIT6.S081-实验准备
实验全程在Vmware虚拟机 (镜像:Ubuntu-20.04-beta-desktop-amd64) 中进行 一、版本控制 1.1 将mit的实验代码克隆到本地 git clone git://g.csail.mit.edu/xv6-labs-2020 1.2 修改本地git配置文件 创建github仓库,记录仓库地址 我的仓库地址就是htt…...
工具在手,创作无忧:一键下载安装Auto CAD工具,让艺术创作更加轻松愉悦!
不要再浪费时间在网上寻找Auto CAD的安装包了!因为你所需的一切都可以在这里找到!作为全球领先的设计和绘图软件,Auto CAD为艺术家、设计师和工程师们提供了无限的创作潜力。不论是建筑设计、工业设计还是室内装饰,Auto CAD都能助…...
第25节: Vue3 带组件
在UniApp中使用Vue3框架时,你可以使用组件来封装可复用的代码块,并在需要的地方进行渲染。下面是一个示例,演示了如何在UniApp中使用Vue3框架使用带组件: <template> <view> <button click"toggleActive&q…...
ubuntu apache2配置反向代理
1.Ubuntu安装apache sudo apt-get update sudo apt-get install apache2 2.apache2反向代理配置 sudo vim /etc/apache2/sites-available/000-default.conf 添加内容如下: <VirtualHost *:80># The ServerName directive sets the request scheme, host…...
【数据挖掘 | 关联规则】FP-grow算法详解(附详细代码、案例实战、学习资源)
! 🤵♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&a…...
力扣题目学习笔记(OC + Swift) 11
11.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾…...
JVM基础入门
JVM 基础入门 JVM 基础 聊一聊 Java 从编码到执行到底是一个怎么样的过程? 假设我们有一个文件 x.Java,你执行 javac,它就会变成 x.class。 这个 class 怎么执行的? 当我们调用 Java 命令的时候,class 会被 load 到…...
免费视频素材网站哪个最好/站长之家工具高清
WINDOWS 7 PRO X86 2015年9月增量补丁包,从Windowsupdate.log中提取的微软官方下载地址,大部分是2015年9月8日发布的,可以通过下载软件批量下载:http://download.windowsupdate.com/d/msdownload/update/software/secu/2015/08/wi…...
太原便宜做网站的公司/网店推广平台有哪些
思科(Cisco)VLAN在配置 思路: 一.配置好DHCP、DNS、web服务器(在这文章的第三) 二.先配置两个交换机的vlan 三.配置路由器 四.检查设备的互通情况 每一步操作都有详细解析哦 拓扑图结构 1.VLAN的理解 交换机可以划分…...
丽水网站开发/廊坊关键词排名优化
B.在打印预览状态下单击“打印”命令C.将插入点置于该页,单击“文件”菜单中“打印”命令,在“页面范围”中选“当前页”D.在工具栏中单击“打印”命令E.单击“文件”菜单中“打印”命令,在“页…...
wordpress用户名忘记/搜索推广出价多少合适
题目描述 在梦境中,Alice来到了火星。不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验。 为了方便,我们可以将火星抽象成平面,并建立平面直角坐标系。火星上一共有N个居民点。每个居民点认为是平…...
深圳专业制作网站的公司哪家好/网站运营课程
原文:Best Practices for Speeding Up Your Web Site 26 开发灵巧的事件处理程序 Develop Smart Event Handlers tag:javascript 如果有太多的事件处理逻辑部署在DOM树的不同元素上,它们的频繁执行会拖慢页面的响应速度。而使用事件委托是一…...
wordpress更换域名所有页面404/个人接外包项目平台
Oracle数据库首先有个数据库名,另外还可以设置一个域名,全局数据库名实际上就是数据库名域名。例如数据库名叫orcl,域名叫做abc.com,那么全局数据库名就叫orcl.abc.com. SID是数据库的系统标识符,一般是通过设置环境变…...