机器学习基于图像大小进行分类(二)

目录

一、sigmod函数

二、决策边界

三、似然函数


一、sigmod函数

f_\theta (x)=\frac{1}{1+exp(-\theta^{T}x )}

exp 的全称是exponential,即指数函数。exp(x) 与ex 含义相同,只是写法不同。e 是自然常数,具体的值为2.7182 . . 

设θTx 为横轴,fθ(x)为纵轴,那么它的图形如下:

\theta^{T}x=0 = 0 时fθ(x) = 0.5,以及0 < fθ(x) < 1 是sigmoid 函数的两个特征。

我们可以通过概率来考虑分类。因为sigmoid 函数的取值范围是0 < fθ(x) < 1,所以它可以作为概率来使用。

二、决策边界

刚才说到把表达式θ(x)当作概率来使用,那么接下来我们就把未知数据x 是横向图像的概率作为fθ(x)。其表达式是这样的。

P(y=1|x)=f_\theta (x)

条件概率。这是在给出x 数据时y = 1,即图像为横向的概率。假如fθ(x)的计算结果是0.7,你认为这是什么意思呢?fθ(x) = 0.7 的意思是图像为横向的概率是70% 吧。一般来说这样就可以把x 分类为横向。如果fθ(x) = 0.2,横向的概率为20%、纵向的概率为80%,这种状态可以分类为纵向。常以0.5 为阈值,然后把fθ(x) 的结果与它相比较,从而分类横向或纵向。

y=\begin{Bmatrix} 1 &(f_\theta (x)\geqslant 0.5) \\ 0& (f_\theta (x)<0.5 ) \end{Bmatrix}

则公式可以写为:

y=\begin{Bmatrix} 1 &(\theta ^{T}x\geq 0) \\ 0&(\theta ^{T}x< 0) \end{Bmatrix}

\theta =\begin{bmatrix} \theta _0\\ \theta _1\\ \theta _2\end{bmatrix}=\begin{bmatrix} -100\\ 2\\ 1\end{bmatrix},x=\begin{bmatrix} 1\\ x_1\\ x_2\end{bmatrix}

\theta ^{T}x=-100\cdot 1+2x_1+x_2\geq 0

x_2\geq -2x_1+100

也就是说,我们将\theta ^{T}x=0 这条直线作为边界线,就可以把这条线两侧的数据分类为横向和纵向了,这样用于数据分类的直线称为决策边界。

实际应用时这个决策边界似乎不能正确地分类图像,这是因为我们决定参数时太随意了,如下图:

为了求得正确的参数θ 而定义目标函数,进行微分,然后求参数的更新表达式,这种算法就称为逻辑回归。

三、似然函数

基于上述内容我们来求参数的更新表达式

一开始我们把x 为横向的概率P(y = 1|x) 定义为fθ(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) 是最大的

P(y = 1|x) 是图像为横向的概率,P(y = 0|x) 是图像为纵向的概率,这适用于全部的训练数据。对于一开始列举的那6 个训练数据,我们期待的最大概率是这样的

而且,假定所有的训练数据都是互不影响、独立发生的,这种情况下整体的概率就可以用下面的联合概率来表示。

L(\theta )=P(y^{(1)}=0|x^{(1)})P(y^{(2)}=0|x^{(2)})\cdot \cdot \cdot P(y^{(6)}=1|x^{(6)})

且联合概率的表达式一般化

L(\theta )=\prod_{i=1}^{n}{P(y^{(i)}=1|x^{(i)})^{y^{(i)}}}P(y^{(i)}=0|x^{(i)})^{1-y^{(i)}}

y^{(i)}=1

L(\theta )=\prod_{i=1}^{n}{P(y^{(i)}=1|x^{(i)})^{1}P(y^{(i)}=0|x^{(i)})^{1-1}

=P(y^{(1)}=1|x^{(i)})

y^{(i)}=0

L(\theta )=\prod_{i=1}^{n}{P(y^{(i)}=1|x^{(i)})^{0}P(y^{(i)}=0|x^{(i)})^{1-0}

=P(y^{(1)}=0|x^{(i)})

比起区分各种情况的写法,汇总到一个表达式的写法更简单。如何得到使这个目标函数最大化的参数θ,回归的时候处理的是误差,所以要最小化,而现在考虑的是联合概率,我们希望概率尽可能大,所以要最大化。这里的目标函数L(θ) 也被称为似然,函数的名字L 取自似然的英文单词Likelihood 的首字母。它的意思是最近似的。我们可以认为似然函数L(θ) 中,使其值最大的参数θ 能够最近似地说明训练数据。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个基于灰度图进行图像分类的完整 Python 代码,不使用任何机器学习算法: ``` python import os import cv2 import numpy as np # 定义图像路径和分类标签 image_dir = 'path/to/image/directory' categories = ['cat', 'dog'] # 定义图像大小和像素阈值 image_size = 50 threshold = 100 # 加载图像数据 def load_data(): data = [] for category in categories: path = os.path.join(image_dir, category) label = categories.index(category) for img in os.listdir(path): img_path = os.path.join(path, img) try: # 转换为灰度图并调整大小 gray_img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE) resized_img = cv2.resize(gray_img, (image_size, image_size)) # 二值化处理 _, thresh_img = cv2.threshold(resized_img, threshold, 255, cv2.THRESH_BINARY) # 将图像数据和标签添加到列表中 data.append([np.array(thresh_img), label]) except Exception as e: pass return data # 加载图像数据并进行训练集和测试集的拆分 data = load_data() np.random.shuffle(data) train_data = data[:int(0.8*len(data))] test_data = data[int(0.8*len(data)):] # 定义训练集和测试集 X_train = [] y_train = [] X_test = [] y_test = [] for features, label in train_data: X_train.append(features) y_train.append(label) for features, label in test_data: X_test.append(features) y_test.append(label) # 转换为numpy数组并进行归一化处理 X_train = np.array(X_train).reshape(-1, image_size, image_size, 1) X_train = X_train / 255.0 y_train = np.array(y_train) X_test = np.array(X_test).reshape(-1, image_size, image_size, 1) X_test = X_test / 255.0 y_test = np.array(y_test) # 搭建卷积神经网络模型 import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D model = Sequential() model.add(Conv2D(32, (3, 3), activation='relu', input_shape=X_train.shape[1:])) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Flatten()) model.add(Dense(64, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(2, activation='softmax')) # 编译模型并进行训练 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test)) # 进行预测 def predict(image_path): img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) resized_img = cv2.resize(img, (image_size, image_size)) _, thresh_img = cv2.threshold(resized_img, threshold, 255, cv2.THRESH_BINARY) X = np.array(thresh_img).reshape(-1, image_size, image_size, 1) X = X / 255.0 prediction = model.predict(X) return categories[np.argmax(prediction)] # 测试预测函数 print(predict('path/to/test/image')) ``` 这段代码中,我们首先定义了图像路径和分类标签,然后通过 `load_data()` 函数加载图像数据,并将图像数据进行灰度化、大小调整、二值化等处理,最终将图像数据和标签添加到列表中。然后,我们将数据随机拆分为训练集和测试集,并将图像数据转换为 numpy 数组并进行归一化处理。接着,我们搭建了一个卷积神经网络模型,并进行编译和训练。最后,我们定义了一个预测函数 `predict()`,将图像进行预处理并进行预测。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上海大学 吴昊

作者逐个题目分析的噢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值