机器学习6:逻辑回归

 机器学习6:逻辑回归_第1张图片

 机器学习6:逻辑回归_第2张图片

机器学习6:逻辑回归_第3张图片

机器学习6:逻辑回归_第4张图片

假设我们有一个二元分类问题,有两个特征(x1, x2)和对应的类别标签(y)。给定

以下训练数据集:

机器学习6:逻辑回归_第5张图片

我们定义逻辑回归模型的假设函数和损失函数。假设函数使用 sigmoid 函

数来将线性函数的输出转换为概率值,使用对数损失函数(log loss)来衡量模

型的预测结果与实际类别标签之间的差异,请使用逻辑回归模型对新的测试样本

(2.2, 2.3) 进行分类预测。

import numpy as np

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

# 训练数据集
X_train = np.array([[1.0, 2.0],
                    [1.5, 1.8],
                    [2.0, 2.5],
                    [3.0, 3.2]])

y_train = np.array([0, 0, 1, 1])

# 添加偏置项,将特征向量X_train扩展为(X0=1, X1, X2)
X_train = np.column_stack((np.ones(X_train.shape[0]), X_train))
print("添加偏置项后的训练数据集:")
print(X_train)

# 初始化模型参数
w = np.zeros(X_train.shape[1])
print("初始化模型参数 w:")
print(w)

# 定义损失函数(对数损失函数)
def loss_function(X, y, w):
    z = np.dot(X, w)
    h = sigmoid(z)
    loss = -y * np.log(h) - (1 - y) * np.log(1 - h)
    return np.mean(loss)

# 定义梯度下降函数
def gradient_descent(X, y, w, learning_rate, num_iter):
    m = X.shape[0]
    for i in range(num_iter):
        z = np.dot(X, w)
        h = sigmoid(z)
        gradient = np.dot(X.T, (h - y)) / m
        w -= learning_rate * gradient
        loss = loss_function(X, y, w)
        print("迭代次数:{},模型参数 w:{},损失函数值:{}".format(i+1, w, loss))
    return w

# 训练模型
learning_rate = 0.1
num_iter = 1000
w = gradient_descent(X_train, y_train, w, learning_rate, num_iter)
print("经过梯度下降算法训练后的模型参数 w:")
print(w)

# 测试样本
X_test = np.array([[1, 2.2], [2.2, 2.3]])

# 添加偏置项,将测试样本扩展为(X0=1, X1, X2)
X_test = np.column_stack((np.ones(X_test.shape[0]), X_test))
print("添加偏置项后的测试样本:")
print(X_test)

# 使用训练好的模型进行分类预测
z_test = np.dot(X_test, w)
h_test = sigmoid(z_test)

# 判断类别标签
predictions = np.round(h_test).astype(int)

# 打印预测结果
# 打印预测结果和属于正类的概率值
for i in range(X_test.shape[0]):
    print("预测样本{}属于{},属于正类的概率值为{}".format(i+1, "正类" if predictions[i]==1 else "负类", h_test[i]))
    print("预测样本{}的类别标签:{}".format(i + 1, predictions[i]))

# for i in range(X_test.shape[0]):
#     if predictions[i] == 1:
#         print("预测样本{}属于正类".format(i + 1))
#     else:
#         print("预测样本{}属于负类".format(i + 1))


# for i in range(X_test.shape[0]):
#     print("预测样本{}的类别标签:{}".format(i + 1, predictions[i]))

机器学习6:逻辑回归_第6张图片

 机器学习6:逻辑回归_第7张图片

对于测试样本 (1,2.2), (2.2, 2.3),我们可以使用经过训练得到的 logistic 回归模型对其进行分类预测,并计算其属于正类的概率值。

具体地,我们可以先将测试样本添加偏置项,然后将该样本的特征向量带入经过训练得到的模型参数 w 中,计算出 sigmoid 函数的输出值(即该样本属于正类的概率值),最后根据概率值来判断该样本属于哪个类别。

 机器学习6:逻辑回归_第8张图片

 sigmoid 函数的计算 1/(1+exp(−z))

机器学习6:逻辑回归_第9张图片

你可能感兴趣的:(机器学习,机器学习,逻辑回归,人工智能)