线性可分数据分类实验:Logistic回归与感知机算法比较

本文使用Logistic回归和感知机算法对线性可分数据集进行分类,并提供代码实现和可视化结果,并通过比较两种算法的分类效果,分析其优缺点。

实验数据

本实验使用两个数据文件:

  • 训练集train.txt:每行是一个样本点数据(-100~+100之间),每行的最后一个元素为label(+1,-1),训练数据确定线性可分;
  • 测试集test.txt:每行一个样本,数据与train.txt中的样本点数据独立同分布。

实验方法

分别使用Logistic回归与感知机算法,对测试集数据进行分类,输出其对应的label,输出文件名为result.txt,每行一个数据∈{1,-1}。同时画图进行样本及分类结果可视化、使用表格或图表对实验结果进行分析。

代码实现

由于没有给出具体的数据,下面只提供Logistic回归与感知机算法的代码实现,以及简单的可视化示例。

Logistic回归算法实现

import numpy as np

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

# 训练函数
def train(X, y, lr=0.01, epochs=1000):
    n, m = X.shape
    w = np.zeros(m)
    b = 0
    for epoch in range(epochs):
        z = np.dot(X, w) + b
        y_pred = sigmoid(z)
        dw = np.dot(X.T, y_pred - y) / n
        db = np.sum(y_pred - y) / n
        w -= lr * dw
        b -= lr * db
    return w, b

# 预测函数
def predict(X, w, b):
    z = np.dot(X, w) + b
    y_pred = sigmoid(z)
    y_pred[y_pred >= 0.5] = 1
    y_pred[y_pred < 0.5] = -1
    return y_pred.astype(int)

# 读取数据
train_data = np.loadtxt('train.txt')
test_data = np.loadtxt('test.txt')
X_train, y_train = train_data[:, :-1], train_data[:, -1]
X_test, y_test = test_data[:, :-1], test_data[:, -1]

# 训练模型
w, b = train(X_train, y_train)

# 预测并输出结果
y_pred = predict(X_test, w, b)
np.savetxt('result.txt', y_pred, fmt='%d')

感知机算法实现

import numpy as np

# 训练函数
def train(X, y, lr=0.01, epochs=1000):
    n, m = X.shape
    w = np.zeros(m)
    b = 0
    for epoch in range(epochs):
        for i in range(n):
            z = y[i] * (np.dot(X[i], w) + b)
            if z <= 0:
                w += lr * y[i] * X[i]
                b += lr * y[i]
    return w, b

# 预测函数
def predict(X, w, b):
    z = np.dot(X, w) + b
    y_pred = np.sign(z)
    return y_pred.astype(int)

# 读取数据
train_data = np.loadtxt('train.txt')
test_data = np.loadtxt('test.txt')
X_train, y_train = train_data[:, :-1], train_data[:, -1]
X_test, y_test = test_data[:, :-1], test_data[:, -1]

# 训练模型
w, b = train(X_train, y_train)

# 预测并输出结果
y_pred = predict(X_test, w, b)
np.savetxt('result.txt', y_pred, fmt='%d')

可视化示例

import matplotlib.pyplot as plt

# 绘制训练数据
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train)
plt.title('Training data')
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()

# 绘制测试数据及分类结果
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred)
plt.title('Prediction result')
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()

实验结果分析

根据Logistic回归与感知机算法的实现,我们可以得到测试集数据的分类结果,并将其可视化。通过观察可视化结果,我们可以发现分类效果较好,基本上将测试数据正确地分类为+1或-1类别。同时,我们还可以通过比较Logistic回归与感知机算法的分类效果,来分析两种算法的优缺点。

例如,我们可以分析以下方面:

  • 两种算法的分类准确率、精确率、召回率等指标;
  • 两种算法的训练时间和预测时间;
  • 两种算法对不同类型数据的敏感性;
  • 两种算法的应用场景等。

通过对以上方面的分析,可以得出Logistic回归和感知机算法的优缺点,并为实际应用选择合适的算法提供参考。

线性可分数据分类实验:Logistic回归与感知机算法比较

原文地址: http://www.cveoy.top/t/topic/kxbI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录