九江建站公司/网站如何做关键词优化

九江建站公司,网站如何做关键词优化,网站推广排名平台,网站建设 英文版比如将一张图片按尺寸识别分类为横向或者纵向两类就是二分类问题 设x轴为图像的宽、y轴为图像的高,那么把训练数据展现在图上就是这样的: 若增加更多的数据集有: 如果只用一条线将图中白色的点和黑色的点分开,那么: 分类的目的就是找到这条线,就可以根据点在线…

比如将一张图片按尺寸识别分类为横向或者纵向两类就是二分类问题
在这里插入图片描述
设x轴为图像的宽、y轴为图像的高,那么把训练数据展现在图上就是这样的:
在这里插入图片描述
若增加更多的数据集有:
在这里插入图片描述
在这里插入图片描述
如果只用一条线将图中白色的点和黑色的点分开,那么:
在这里插入图片描述
分类的目的就是找到这条线,就可以根据点在线的哪一边来判断该数据属于哪个类别,比如图像是横向还是纵向的了
而这条线是使权重向量成为法线向量的直线。设权重向量为w,那么那条直线的表达式就是:
在这里插入图片描述
解释:
权重向量就是待求的未知参数,w是权重一词的英文——weight的首字母。
上次学习回归时,我们为了求未知参数θ 做了很多事情,而w和θ是一样的。
向量内积为零表示两向量垂直:
在这里插入图片描述
比如我们设权重向量为w=(1,1),那么刚才的内积表达式会变成:
w·x=w1x1+w2x2=1·x1 +1·x2=x1 +x2 =0
即x2=-x1,一条斜率为-1的直线,像这样与w成直角的向量有很多,它们连成了一条直线
在这里插入图片描述
内积还可以以向量夹角余弦表示:
在这里插入图片描述
表达式中的|w| 和|x| 是向量的长,因此必定是正数。
所以要想使内积为0,只能使cosθ=0。
要想使cosθ=0,也就意味着θ=90◦或θ =270◦。这两种情况也是直角。
所以我们的目标是最终找到与能够精准分类的直线成直角的权重向量
在这里插入图片描述
一开始并不存在画的那种直线,而是要通过训练找到权重向量,然后才能得到与这个向量垂直的直线,最后根据这条直线就可以对数据进行分类了。
对于cosθ图像:
在这里插入图片描述
不难得出在90◦ <θ<270◦的时候cosθ为负
而与权重向量w之间的夹角为θ,在90◦<θ<270◦范围内的所有向量都符合条件
即在这条直线下面、与权重向量方向相反的这个区域内任意找出一个向量,都满足与w内积为负
在这里插入图片描述
而内积为正,则说明两个向量大致属于一个方向,即绝对不可能反向,那么这些向量在:
在这里插入图片描述
内积是衡量向量之间相似程度的指标。
结果为正,说明二者相似;为0则二者垂直;为负则说明二者不相似
求出权重向量的基本做法和回归时相同:将权重向量用作参数,创建更新表达式来更新参数。

感知机(perceptron)模型(神经网络和深度学习的基础模型):
接受多个输入后将每个值与各自的权重相乘,最后输出总和的模型:
在这里插入图片描述
实质是向量间的内积

准备训练数据:
设表示宽的轴为x1、表示高的轴为x2,用y来表示图像是横向还是纵向的,横向的值为1、纵向为−1。
在这里插入图片描述
定义判别函数fw(x):根据参数向量x来判断图像是横向还是纵向(返回1或者−1产出分类结果)的函数:
在这里插入图片描述
即根据内积的符号来给出不同返回值的函数,以此判断图像是横向还是纵向的
那么定义权重向量的更新表达式来处理所有训练数据,更新权重向量:
在这里插入图片描述
若通过判别函数对宽和高的向量x进行分类的结果f与实际的标签y不同,即判别函数的分类结果不正确时就会更新权重,反之则不会更新
更新的逻辑:
先任意确定一个初始权重向量w(通过随机值来初始化的,类似于回归时随意确定初始值):
在这里插入图片描述
假设第一个训练数据是x(1)=(125,30)
在这里插入图片描述

现在权重向量w和训练数据的向量x(1)二者的方向几乎相反,w和x(1)之间的夹角θ的范围是90◦<θ<270◦,内积为负。也就是说,判别函数fw(x(1))的分类结果为−1,而训练数据x(1)的标签y(1)是1,所以fw(x(1))≠y(1)分类失败。
在这里插入图片描述
现在y(1)=1,所以更新表达式:w+y(1)x(1) = w +x(1)
在这里插入图片描述
这个w+x(1)就是下一个新的w,画一条与新的权重向量垂直的直线,相当于把原来的直线旋转了很多:
在这里插入图片描述
刚才x(1)与权重向量分居直线两侧,现在它们在同一侧了,即这次θ<90◦,所以内积为正,判别函数fw(x)的分类结果为1。而且x(1)的标签也为1,说明分类成功了。
在这里插入图片描述
本质就是分类失败时更新权重向量,使得直线旋转相应的角度
像这样重复更新所有的参数,就是感知机的学习方法((简单感知机或单层感知机),而多层感知机就是神经网络)。
但是感知机只能解决线性可分的问题,对于此类非线性问题失败了,找不到一条直线完全分类:
在这里插入图片描述
线性可分指的就是能够使用直线分类的情况,像这样不能用直线分类的就不是线性可分。
由此引出解决线性不可分的逻辑回归:
与感知机的不同之处在于,它是把分类作为概率来考虑的,比如x(1)是A类的概率为10%…
这里设横向的值为1、纵向的值为0(不是之前的-1)(这些是可以任意设定的,一般以简化表达式为目标)。
先回顾一个通过最速下降法或随机梯度下降法来学习参数θ的表达式。使用这个θ能够求出对未知数据x的输出值:
在这里插入图片描述
此处定义一个能够将未知数据分类为某个类别的函数fθ(x)(和感知机的判别函数fw(x)类似的东西)
使用与回归时同样的参数θ,函数的形式就是:
在这里插入图片描述
exp 的全称是exponential,即指数函数。
exp(x)与 e^x含义相同,只是写法不同。e是自然常数,具体的值为2.7182…
这个函数的名字叫sigmoid函数,设θ^Tx为横轴,fθ(x)为纵轴,那么它的图形是这样的:
在这里插入图片描述
θTx =0时fθ(x)=0.5,以及0<fθ(x)<1(所以sigmoid函数可以作为概率来使用)是sigmoid函数的两个特征

接下来我们就把未知数据x是横向图像的概率作为fθ(x),那么:
在这里插入图片描述该条件概率表示在给出x数据时y=1,即图像为横向的概率。
假如fθ(x)的计算结果是0.7,表示是图像为横向的概率是70%
若是以0.5为阈值,然后把fθ(x)的结果与它相比较,从而分类横向或纵向,则有
在这里插入图片描述
而这个0.5很特殊:在θTx=0时,fθ(x)=0.5且在fθ(x)⩾0.5时,θTx⩾0。
在这里插入图片描述
所以有(因为单调,所以反过来,若θTx⩾0则有fθ(x)⩾0.5,可以归类为横向)
在这里插入图片描述
那么可以改写上述表达式:
在这里插入图片描述
设横轴为图像的宽(x1)、纵轴为图像的高(x2),随便确定θ再具体地去考虑,先画出下θTx⩾0的图像图来:
在这里插入图片描述
在这里插入图片描述
这个不等式表示的范围也就是图像被分类为横向的范围:
在这里插入图片描述
在这里插入图片描述
也就是说,将θTx=0这条直线作为边界线,就可以把这条线两侧的数据分类为横向和纵向了
这样用于数据分类的直线称为决策边界
但是初始值往往是错误的:
在这里插入图片描述
所以和回归的时候一样,是因为我们随意决定了参数。那么为了求得正确的参数θ则定义目标函数,进行微分,然后求参数的更新表达式,这种算法就称为逻辑回归

一开始我们把x为横向的概率P(y=1|x)定义为fθ(x)了。
基于此(P(y=1|x)是图像为横向的概率,P(y=0|x)是图像为纵向的概率),训练数据的标签y和fθ(x)是什么样的关系会比较理想呢:
既然fθ(x)是x为横向时的概率……那么在y=1时fθ(x)=1,y=0时fθ(x)=0的关系就是理想的:
y =1的时候,我们希望概率P(y=1|x)是最大的
y =0的时候,我们希望概率P(y=0|x)是最大的
所以对于训练数据的分类概率,有"希望":
在这里插入图片描述
假定所有的训练数据都是互不影响、独立发生的,这种情况下整体的概率就可以用联合概率:
在这里插入图片描述
联合概率的表达式一般化:
在这里插入图片描述
这里的目标函数L(θ)也被称为似然,函数的名字L取自似然的英文单词Likelihood的首字母。
在这里插入图片描述
才发现,代入y(i)=0/=1时,最终可简化为表示数据集为横向的概率/纵向的概率的条件概率
在这里插入图片描述
在这里插入图片描述
考虑一下使这个目标函数最大化的参数θ(回归的时候处理的是误差,所以要最小化,而现在考虑的是联合概率,我们希望概率尽可能大,所以要最大化)
我们可以认为似然函数L(θ)中,使其值最大的参数θ能够最近似地说明训练数据。

对似然函数进行取对微分,求出参数θ
取对是因为好微分,且对数单增不影响单调性是在L(θ1)<L(θ2)时,有logL(θ1) < logL(θ2)成立。
也就是说,使L(θ) 最大化等价于使logL(θ) 最大化
在这里插入图片描述
第2行是log(ab)=loga+logb
第3行是logab =bloga
第4行是P(y(i)=0|x(i)) = 1 − P(y(i)=1|x(i))
所以有:
在这里插入图片描述
那么对参数θ微分有:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但对sigmoid函数微分麻烦:
在这里插入图片描述
直接有其微分结论(fθ(x)本身就是sigmoid函数,所以这个微分表达式可以直接使用):
在这里插入图片描述
也可也设z=θTx,然后再一次使用复合函数的微分:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在代入各个结果,然后通过展开、约分,使表达式更简洁
在这里插入图片描述
接下来要做的就是从这个表达式导出参数更新表达式。不过现在是以最大化为目标,所以必须按照与最小化问题时相反的方向移动参数。
也就是说,最小化时要按照与微分结果的符号相反的方向移动,而最大化时要与微分结果的符号同向移动。
在这里插入图片描述
当然也可再变形
在这里插入图片描述

线性不可分:
增加次数,之前的决策边界是直线,现在则是曲线了,通过随意地增加次数,就可以得到复杂形状的决策边界了.
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
实现:
感知机:
训练数据 images1.csv

 x1,x2,y153,432,-1220,262,-1118,214,-1474,384,1485,411,1233,430,-1396,361,1484,349,1429,259,1286,220,1399,433,-1403,340,1252,34,1497,472,1379,416,-176,163,-1263,112,126,193,-161,473,-1420,253,1

在图中用圆点表示y=1的数据、用叉号表示y=−1的数据:

# 绘图
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('Agg')
# 读入训练数据
train = np.loadtxt('images1.csv', delimiter=',', skiprows=1)
train_x = train[:,0:2]
train_y = train[:,2]
# # 绘图
# plt.plot(train_x[train_y ==  1, 0], train_x[train_y ==  1, 1], 'o')
# plt.plot(train_x[train_y == -1, 0], train_x[train_y == -1, 1], 'x')
# plt.axis('scaled')
# plt.savefig('AI7.png')  # 保存为图片,而非 plt.show()

在这里插入图片描述
初始化权重w,并实现函数:
在这里插入图片描述

# 权重的初始化
w = np.random.rand(2)
# 判别函数
def f(x):if np.dot(w, x) >= 0:return 1else:return -1

实现权重的更新表达式,感知机停止学习的标准是精度(但代码中以重复十次为例)

# 重复次数
epoch = 10# 更新次数
count = 0# 学习权重
for _ in range(epoch):for x, y in zip(train_x, train_y):if f(x) != y:w = w + y * x# 输出日志count += 1print(' 第 {} 次 : w = {}'.format(count, w))

使权重向量成为法线向量的直线方程是内积为0的x的集合。
所以对它进行移项变形

x1 = np.arange(0, 500)
plt.plot(train_x[train_y ==  1, 0], train_x[train_y ==  1, 1], 'o')
plt.plot(train_x[train_y == -1, 0], train_x[train_y == -1, 1], 'x')
plt.plot(x1, -w[0] / w[1] * x1, linestyle='dashed')
plt.savefig('AI8.png')

最终绘出以下表达式的图形:
在这里插入图片描述
值得说明的是,此处没有对训练数据进行标准化环节也成功了
完整代码:

# 绘图
import numpy as np
import matplotlib
import matplotlib.pyplot as pltmatplotlib.use('Agg')
# 读入训练数据
train = np.loadtxt('images1.csv', delimiter=',', skiprows=1)
train_x = train[:, 0:2]
train_y = train[:, 2]
# # 绘图
# plt.plot(train_x[train_y ==  1, 0], train_x[train_y ==  1, 1], 'o')
# plt.plot(train_x[train_y == -1, 0], train_x[train_y == -1, 1], 'x')
# plt.axis('scaled')
# plt.savefig('AI7.png')  # 保存为图片,而非 plt.show()# 权重的初始化
w = np.random.rand(2)# 判别函数
def f(x):if np.dot(w, x) >= 0:return 1else:return -1# 重复次数
epoch = 10# 更新次数
count = 0# 学习权重
for _ in range(epoch):for x, y in zip(train_x, train_y):if f(x) != y:w = w + y * x# 输出日志count += 1print(' 第 {} 次 : w = {}'.format(count, w))x1 = np.arange(0, 500)
plt.plot(train_x[train_y ==  1, 0], train_x[train_y ==  1, 1], 'o')
plt.plot(train_x[train_y == -1, 0], train_x[train_y == -1, 1], 'x')
plt.plot(x1, -w[0] / w[1] * x1, linestyle='dashed')
plt.savefig('AI8.png')

验证:

# 200×100 的横向图像
f([200, 100])
应该输出1
# 100×200 的纵向图像
f([100, 200])
应该输出-1

在这里插入图片描述
刚才试验的都是二维数据,如果增加训练数据和w的维度,那么模型也可以处理三维以上的数据。
不过模型依然只能解决线性可分的问题。
接下来实现解决逻辑回归:

数据中的x1和x2可以不变,但y需要变一下。因为在逻辑回归中,我们需要把横向分配为1、纵向分配为0。
images2.csv

 x1,x2,y153,432,0220,262,0118,214,0474,384,1485,411,1233,430,0396,361,1484,349,1429,259,1286,220,1399,433,0403,340,1252,34,1497,472,1379,416,076,163,0263,112,126,193,061,473,0420,253,1

实现逻辑回归首先初始化参数,然后对训练数据标准化。
对x1和x2分别取平均值和标准差,最后标准化。另外不要忘了加一个x0列。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('Agg')# 读入训练数据
train = np.loadtxt('images2.csv', delimiter=',', skiprows=1)
train_x = train[:,0:2]
train_y = train[:,2]
# 初始化参数
theta = np.random.rand(3)# 标准化
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)
def standardize(x):return (x - mu) / sigmatrain_z = standardize(train_x)# 增加x0
def to_matrix(x):x0 = np.ones([x.shape[0], 1])return np.hstack([x0, x])X = to_matrix(train_z)# 将标准化后的训练数据画成图
plt.plot(train_z[train_y == 1, 0], train_z[train_y == 1, 1], 'o')
plt.plot(train_z[train_y == 0, 0], train_z[train_y == 0, 1], 'x')
plt.savefig('AI9.png')

在这里插入图片描述
轴的刻度变了,说明标准化成功了
下一个要做的是预测函数(sigmoid)的实现:
在这里插入图片描述

# sigmoid 函数
def f(x):return 1 / (1 + np.exp(-np.dot(x, theta)))

参数更新部分的实现:
学习逻辑回归的时候,我们进行了定义逻辑回归的似然函数,对对数似然函数进行微分等一系列操作,然后最终得到的参数更新表达式
现在与回归时一样,将fθ(x(i))−y(i)当作向量来处理,将它与训练数据的矩阵相乘:

# 学习率
ETA = 1e-3
# 重复次数
epoch = 5000
# 重复学习
for _ in range(epoch):theta = theta - ETA * np.dot(f(X) - train_y, X)

过在逻辑回归中,θTx=0这条直线是决策边界.θTx⩾0时图像是横向的,θTx<0时图像是纵向的
将θTx=0变形并加以整理,得到:
在这里插入图片描述
完整代码:

x0 = np.linspace(-2, 2, 100)
plt.plot(train_z[train_y == 1, 0], train_z[train_y == 1, 1], 'o')
plt.plot(train_z[train_y == 0, 0], train_z[train_y == 0, 1], 'x')
plt.plot(x0, -(theta[0] + theta[1] * x0) / theta[2],linestyle='dashed')
plt.savefig('AI10.png')

在这里插入图片描述

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('Agg')# 读入训练数据
train = np.loadtxt('images2.csv', delimiter=',', skiprows=1)
train_x = train[:,0:2]
train_y = train[:,2]
# 初始化参数
theta = np.random.rand(3)# 标准化
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)
def standardize(x):return (x - mu) / sigmatrain_z = standardize(train_x)# 增加x0
def to_matrix(x):x0 = np.ones([x.shape[0], 1])return np.hstack([x0, x])X = to_matrix(train_z)# # 将标准化后的训练数据画成图
# plt.plot(train_z[train_y == 1, 0], train_z[train_y == 1, 1], 'o')
# plt.plot(train_z[train_y == 0, 0], train_z[train_y == 0, 1], 'x')
# plt.savefig('AI9.png')# sigmoid 函数
def f(x):return 1 / (1 + np.exp(-np.dot(x, theta)))
# 学习率
ETA = 1e-3
# 重复次数
epoch = 5000
# 重复学习
for _ in range(epoch):theta = theta - ETA * np.dot(f(X) - train_y, X)
#整理
x0 = np.linspace(-2, 2, 100)
plt.plot(train_z[train_y == 1, 0], train_z[train_y == 1, 1], 'o')
plt.plot(train_z[train_y == 0, 0], train_z[train_y == 0, 1], 'x')
plt.plot(x0, -(theta[0] + theta[1] * x0) / theta[2],linestyle='dashed')
plt.savefig('AI10.png')

验证

>>> f(to_matrix(standardize([...     [200,100], # 200×100 的横向图像
...     [100,200]  # 100×200 的纵向图像
... ])))#fθ(x)返回的是x为横向的概率array([ 0.91740319,  0.02955752])

在这里插入图片描述
说明第一个有87%的概率为横向,另一个有26%的概率为横向(即可以认定为纵向)
直接看概率可能不够直观,我们可以确定一个阈值,然后定义一个根据阈值返回1或0的函数

添加代码:
# sigmoid 函数
def f(x):return 1 / (1 + np.exp(-np.dot(x, theta)))
#改进版本sigmoid,不返回概率而是返回阈值情况下的答案
def classify(x):#return (f(x) >= 0.5).astype(np.int)#报错return (f(x) >= 0.5).astype(int)

在这里插入图片描述

在这里插入图片描述
现在直接表示为是否是横向

线性不可分问题:

x1,x2,y
0.54508775,2.34541183,0
0.32769134,13.43066561,0
4.42748117,14.74150395,0
2.98189041,-1.81818172,1
4.02286274,8.90695686,1
2.26722613,-6.61287392,1
-2.66447221,5.05453871,1
-1.03482441,-1.95643469,14.06331548,1.70892541,12.89053966,6.07174283,02.26929206,10.59789814,04.68096051,13.01153161,11.27884366,-9.83826738,1-0.1485496,12.99605136,0-0.65113893,10.59417745,03.69145079,3.25209182,1-0.63429623,11.6135625,00.17589959,5.84139826,00.98204409,-9.41271559,1-0.11094911,6.27900499,0

按照之前的标准做法,将它们画成图看看

import numpy as np
import matplotlibmatplotlib.use('Agg')
import matplotlib.pyplot as plttrain = np.loadtxt('data3.csv', delimiter=',', skiprows=1)
train_x = train[:, 0:2]
train_y = train[:, 2]
plt.plot(train_x[train_y == 1, 0], train_x[train_y == 1, 1], 'o')
plt.plot(train_x[train_y == 0, 0], train_x[train_y == 0, 1], 'x')
plt.plot(train_x[train_y == 0, 0], train_x[train_y == 0, 1], 'x')plt.savefig('AI11.png')

在这里插入图片描述
这个数据看上去确实不能用一条直线来分类,要用二次函数(在训练数据里加上x1的平方,增加一个θ3参数,参数总数达到四个)

# 参数初始化
theta = np.random.rand(4)# 标准化
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)def standardize(x):return (x - mu) / sigmatrain_z = standardize(train_x)# 增加x0和x3
def to_matrix(x):x0 = np.ones([x.shape[0], 1])x3 = x[:, 0, np.newaxis] ** 2return np.hstack([x0, x, x3])X = to_matrix(train_z)

而sigmoid函数和学习部分与前面线性可分部分完全一样

# sigmoid 函数
def f(x):return 1 / (1 + np.exp(-np.dot(x, theta)))
# 学习率
ETA = 1e-3
# 重复次数
epoch = 5000
# 重复学习
for _ in range(epoch):theta = theta - ETA * np.dot(f(X) - train_y, X)

考虑画成图,则需要对有四个参数的θTx=0方程变形
在这里插入图片描述

x1 = np.linspace(-2, 2, 100)
x2 = -(theta[0] + theta[1] * x1 + theta[3] * x1 ** 2) / theta[2]
plt.plot(train_z[train_y == 1, 0], train_z[train_y == 1, 1], 'o')
plt.plot(train_z[train_y == 0, 0], train_z[train_y == 0, 1], 'x')
plt.plot(x1, x2, linestyle='dashed')
plt.savefig('AI12.png')

将前面绘图部分代码注释,不然异常
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

import numpy as np
import matplotlibmatplotlib.use('Agg')
import matplotlib.pyplot as plttrain = np.loadtxt('data3.csv', delimiter=',', skiprows=1)
train_x = train[:, 0:2]
train_y = train[:, 2]
# plt.plot(train_x[train_y == 1, 0], train_x[train_y == 1, 1], 'o')
# plt.plot(train_x[train_y == 0, 0], train_x[train_y == 0, 1], 'x')
# plt.plot(train_x[train_y == 0, 0], train_x[train_y == 0, 1], 'x')
# plt.savefig('AI11.png')# 参数初始化
theta = np.random.rand(4)# 标准化
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)def standardize(x):return (x - mu) / sigmatrain_z = standardize(train_x)# 增加x0和x3
def to_matrix(x):x0 = np.ones([x.shape[0], 1])x3 = x[:, 0, np.newaxis] ** 2return np.hstack([x0, x, x3])X = to_matrix(train_z)
# sigmoid 函数
def f(x):return 1 / (1 + np.exp(-np.dot(x, theta)))
# 学习率
ETA = 1e-3
# 重复次数
epoch = 5000
# 重复学习
for _ in range(epoch):theta = theta - ETA * np.dot(f(X) - train_y, X)x1 = np.linspace(-2, 2, 100)
x2 = -(theta[0] + theta[1] * x1 + theta[3] * x1 ** 2) / theta[2]
plt.plot(train_z[train_y == 1, 0], train_z[train_y == 1, 1], 'o')
plt.plot(train_z[train_y == 0, 0], train_z[train_y == 0, 1], 'x')
plt.plot(x1, x2, linestyle='dashed')
plt.savefig('AI12.png')

和回归时一样,将重复次数作为横轴、精度作为纵轴来绘图,这次应该会看到精度上升的样子
过精度的计算方法(这个值是被正确分类的数据个数占全部个数的比例):
在这里插入图片描述

# 精度的历史记录
accuracies = []# 重复学习
for _ in range(epoch):theta = theta - ETA * np.dot(f(X) - train_y, X)# 计算现在的精度result = classify(X) == train_yaccuracy = len(result[result == True]) / len(result)accuracies.append(accuracy)# 将精度画成图
x = np.arange(len(accuracies))plt.plot(x, accuracies)
plt.savefig('AI13.png')

完整

import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plttrain = np.loadtxt('data3.csv', delimiter=',', skiprows=1)
train_x = train[:, 0:2]
train_y = train[:, 2]# 参数初始化
theta = np.random.rand(4)# 精度的历史记录
accuracies = []# 标准化
mu = train_x.mean(axis=0)
sigma = train_x.std(axis=0)def standardize(x):return (x - mu) / sigmatrain_z = standardize(train_x)# 增加x0和x3
def to_matrix(x):x0 = np.ones([x.shape[0], 1])x3 = x[:, 0, np.newaxis] ** 2return np.hstack([x0, x, x3])X = to_matrix(train_z)# sigmoid 函数
def f(x):return 1 / (1 + np.exp(-np.dot(x, theta)))def classify(x):return (f(x) >= 0.5).astype(int)# 学习率
ETA = 1e-3
# 重复次数
epoch = 5000# 重复学习
for _ in range(epoch):theta = theta - ETA * np.dot(f(X) - train_y, X)# 计算现在的精度result = classify(X) == train_yaccuracy = len(result[result == True]) / len(result)accuracies.append(accuracy)# 将精度画成图
x = np.arange(len(accuracies))plt.plot(x, accuracies)
plt.savefig('AI13.png')

在这里插入图片描述
随着次数的增加,精度的确变好了(线有棱有角是因为是训练数据只有20个,精度值只能为0.05的整数倍)
从图中可以看出,在重复满5000次之前,精度已经到1.0了。刚才随便定义了个重复学习5000次,也可以像这样,每次学习后都计算精度,当精度达到满意的程度后就停止学习,而不是一开始就大额初值。即根据精度来决定是否停止学习.
在这里插入图片描述
修改重复次数为1000发现效果仍然能达到1的精度(并且实则更准确得出只要700次)
在这里插入图片描述
在这里插入图片描述
随机梯度下降法
把学习部分稍稍修改一下:
在这里插入图片描述

# 重复学习
for _ in range(epoch):# 使用随机梯度下降法更新参数p = np.random.permutation(X.shape[0])for x, y in zip(X[p,:], train_y[p]):theta = theta - ETA * (f(x) - y) * xx1 = np.linspace(-2, 2, 100)
x2 = -(theta[0] + theta[1] * x1 + theta[3] * x1 ** 2) / theta[2]
plt.plot(train_z[train_y == 1, 0], train_z[train_y == 1, 1], 'o')
plt.plot(train_z[train_y == 0, 0], train_z[train_y == 0, 1], 'x')
plt.plot(x1, x2, linestyle='dashed')
plt.savefig('AI14.png')

在这里插入图片描述
后续更新:分类应用Iris数据集

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

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

相关文章

Docker build 会在本地产生巨大的文件

Docker build 会在本地产生巨大的文件&#xff0c; 比如 用 这个命令列出本地镜像 docker images 可见size都是很大的&#xff0c; 到docker目录下&#xff0c;看到ext4.vhdx的大小 80多G 那只能用这个命令把不用的镜像删掉了&#xff1a; &#xff08;rmi后面是镜像id&a…

台式机电脑组装---电脑机箱与主板接线

台式机电脑组装—电脑机箱与主板接线 1、机箱连接主板的跳线一般主要有USB 2.0、USB 3.0、前置音频接口(HD_AUDIO)以及POWER SW、RESET SW、POWER LED、HDD LED四个主板跳线&#xff0c;这些跳线分别的含义如下。 RESET SW&#xff1a;机箱重启按键&#xff1b;注&#xff1a…

【虚幻引擎UE5】SpawnActor生成Character实例不执行AI Move To,未初始化AIController的原因和解决方法

虚幻引擎版本&#xff1a;5.5.4 问题描述 刚创建的Third Person项目里&#xff0c;定义一个BP_Enemy蓝图&#xff0c;拖拽到场景中产生的实例会追随玩家&#xff0c;但SpawnActor产生的实例会固定不动。BP_Enemy蓝图具体设计如下&#xff1a; BP_Enemy的Event Graph ​​ 又定义…

跨平台RTSP高性能实时播放器实现思路

跨平台RTSP高性能实时播放器实现思路 目标&#xff1a;局域网100ms以内超低延迟 一、引言 现有播放器&#xff08;如VLC&#xff09;在RTSP实时播放场景中面临高延迟&#xff08;通常数秒&#xff09;和资源占用大的问题。本文提出一种跨平台解决方案&#xff0c;通过网络层…

【Linux内核系列】:动静态库详解

&#x1f525; 本文专栏&#xff1a;Linux &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 有些鸟儿是注定是关不住的&#xff0c;因为它们的每一片羽翼都沾满了自由的光辉 ★★★ 本文前置知识&#xff1a; 编译与链接的过程…

深度解读DeepSeek部署使用安全(48页PPT)(文末有下载方式)

深度解读DeepSeek&#xff1a;部署、使用与安全 详细资料请看本解读文章的最后内容。 引言 DeepSeek作为一款先进的人工智能模型&#xff0c;其部署、使用与安全性是用户最为关注的三大核心问题。本文将从本地化部署、使用方法与技巧、以及安全性三个方面&#xff0c;对Deep…

【详细解决】pycharm 终端出现报错:“Failed : 无法将“Failed”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

昨天在终端一顿操作后突然打开pycharm时就开始报错&#xff1a; 无法将“Failed”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 所在位置 行:1 字符: 1 Failed to act…

【电路笔记】-D型触发器

D型触发器 文章目录 D型触发器1、概述2、主从D触发器3、使用D型触发器进行分频4、D触发器作为数据锁存器5、透明数据锁存器6、总结D型触发器是一种改进的置位-复位触发器,通过增加一个反相器来防止S和R输入处于相同的逻辑电平。 1、概述 D型触发器克服了基本SR NAND门双稳态电…

智慧共享杆:城市智能化管理的 “多面手”

智慧共享杆&#xff1a;城市智能化管理的 “多面手” 在智慧城市建设的进程中&#xff0c;智慧共享杆凭借其多功能与集约化的特性&#xff0c;逐渐成为城市基础设施建设领域的重点关注对象。它不仅革新了传统路灯杆的固有模式&#xff0c;更为城市的高效管理与便捷服务开创了全…

Microchip AN1477中关于LLC数字补偿器的疑问

最近在学习Microchip的AN1477关于LLC的功率级传递函数推导及数字补偿器设计&#xff0c;对其中的2P2Z数字补偿器的系数有一些困惑。我在MATLAB中运行了源程序提供的VMC_LLC.m文件&#xff0c;发现有些地方和AN1477中的结果不一致。现在把相关有疑问的地方列举出来&#xff0c;也…

云盘搭建笔记

报错问题&#xff1a; No input file specified. 伪静态 location / {if (!-e $request_filename) { rewrite ^(.*)$ /index.php/$1 last;break;} } location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php/$1 last; break; } } 设…

如何打造安全稳定的亚马逊采购测评自养号下单系统?

在当今的电商领域&#xff0c;亚马逊作为全球领先的在线购物平台&#xff0c;其商品种类繁多&#xff0c;用户基数庞大&#xff0c;成为了众多商家和消费者的首选。而对于一些需要进行商品测评或市场调研的用户来说&#xff0c;拥有一个稳定、安全的亚马逊账号体系显得尤为重要…

笔记本电脑关不了机是怎么回事 这有解决方法

在快节奏的现代生活中&#xff0c;笔记本电脑已成为我们工作、学习和娱乐的得力助手。在使用电脑的过程中&#xff0c;笔记本电脑突然关不了机了&#xff0c;怎么回事&#xff1f;下面驱动人生就来讲一讲笔记本电脑不能正常关机的解决方法&#xff0c;有需要的可以来看看。 一、…

【动态规划篇】91. 解码方法

91. 解码方法 题目链接&#xff1a; 91. 解码方法 题目叙述&#xff1a; 一条包含字母 A-Z 的消息通过以下映射进行了 编码 &#xff1a; “1” -> ‘A’ “2” -> ‘B’ … “25” -> ‘Y’ “26” -> ‘Z’ 然而&#xff0c;在解码已编码的消息时&#xff0c;你…

使用【docker】+【shell】脚本半自动化部署微服务项目

一.前言 以下是一个基于 ‌Docker Shell脚本‌ 的半自动化部署方案&#xff0c;包含镜像构建、容器管理、网络配置和日志监控等核心功能&#xff0c;适用于大多数Web应用或微服务项目。 二‌.目录结构 三.脚本代码实现 1.‌Shell脚本实现 (deploy.sh) #!/bin/bash# 设置颜…

win10搭建opengl环境搭建并测试--输出立方体球体和碗型并在球体上贴图

参照本文档可以完成环境搭建和测试&#xff0c;如果想要快速完成环境的搭建可以获取本人的工程&#xff0c;包括所用到的工具链和测试工程源码获取&#xff08;非免费介意务下载&#xff09;&#xff1a;链接: https://pan.baidu.com/s/1H2ejbT7kLM9ore5MqyomgA 提取码: 8s1b …

CIR-Net:用于 RGB-D 显著性目标检测的跨模态交互与优化(问题)

摘要 问题一&#xff1a;自模态注意力优化单元和跨模态加权优化单元什么意思&#xff1f; 1 优化中间件结构的作用 位置&#xff1a;位于编码器和解码器之间 输入&#xff1a;编码器提取的RGB特征&#xff0c;深度特征以及RGB-D特征。 输出&#xff1a;经过优化的RGB&…

【正点原子K210连载】第七十六章 音频FFT实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第七十六章 音频FFT实验 本章将介绍CanMV下FFT的应用&#xff0c;通过将时域采集到的音频数据通过FFT为频域。通过本章的学习&#xff0c;读者将学习到CanMV下控制FFT加速器进行FFT的使用。 本章分为如下几个小节&#xff1a; 32.1 maix.FFT模块介绍 32.2 硬件设计 32.3 程序设…

火绒终端安全管理系统V2.0——行为管理(软件禁用+违规外联)

火绒终端安全管理系统V2.0&#xff1a;行为管理策略分为软件禁用和违规外联两部分&#xff0c;能够管理终端用户软件的使用&#xff0c;以及终端用户违规连接外部网络的问题。 l 软件禁用 软件禁用策略可以选择软件名单的属性、添加软件名单以及设置发现终端使用禁用软件时的…

FastJson:JSON JSONObject JSONArray详解以及SimplePropertyPreFilter 的介绍

FastJson&#xff1a;JSON JSONObject JSONArray详解以及SimplePropertyPreFilter 的介绍 FastJson是阿里巴巴开发的一款专门用于Java开发的包&#xff0c;实现Json对象&#xff0c;JavaBean对&#xff0c;Json字符串之间的转换。 文章目录 FastJson&#xff1a;JSON JSONObje…