逻辑回归的Python实现

逻辑回归是数据科学家广泛用于分类和概率计算的监督学习算法。对于数据科学新手来说,这是一个既实用又简单的算法。本文将带深入了解如何通过编写Python代码来实现逻辑回归。

逻辑回归简介

逻辑回归是一种用于二分类和多分类数据集的分类算法。如果对逻辑回归感兴趣,可以阅读更多相关文章,例如:。

如何实现逻辑回归

实现逻辑回归有两种方式:一种是编写自己的函数,包括Sigmoid函数、成本函数等;另一种是使用Scikit-Learn库,它提供了内置的函数,只需传入参数即可。如果是第一次学习逻辑回归,建议先自己编写代码,以更好地理解算法的核心概念。

训练数据集

在开始项目之前,可视化数据集是很重要的。通过可视化数据集,可以了解数据的分布和特征的重要性。接下来,将训练数据集,包括计算概率和成本,并在可用数据集上降低成本。训练好的模型可以在验证集上进行准确性检查,验证集通常占数据集的20%,其余80%作为训练集。

# 加载数据集 import pandas as pd loan = pd.read_csv("loan_test.csv") # 查看数据集 print(loan.head())

使用Matplotlib库绘制图表可以帮助更好地理解数据。接下来,将学习如何使用Sigmoid函数进行预测。

使用Sigmoid函数进行预测

逻辑回归中,需要使用Sigmoid函数计算训练集中每个条目的预测概率。Sigmoid函数是一个非常重要的概念。下面是一个特征向量X和权重向量Theta的示例。

# 计算Sigmoid函数 import numpy as np def calc_sigmoid(z): p = 1 / (1 + np.exp(-z)) p = np.minimum(p, 0.9999) p = np.maximum(p, 0.0001) return p # 计算预测概率 def calc_pred_func(theta, x): y = np.dot(theta, np.transpose(x)) return calc_sigmoid(y)

计算成本

成本是预测误差的度量,需要逐步降低成本。首先,使用给定的函数计算成本:

# 计算预测误差 def calc_error(y_pred, y_label): len_label = len(y_label) cost = (-y_label * np.log(y_pred) - (1 - y_label) * np.log(1 - y_pred)).sum() / len_label return cost

使用梯度下降降低成本

# 梯度下降 def gradient_descent(y_pred, y_label, x, learning_rate, theta): len_label = len(y_label) J = (-(np.dot(np.transpose(x), (y_label - y_pred))) / len_label) theta -= learning_rate * J return theta # 训练模型 def train(y_label, x, learning_rate, theta, iterations): list_cost = [] for i in range(iterations): y_pred = calc_pred_func(theta, x) theta = gradient_descent(y_pred, y_label, x, learning_rate, theta) if i % 100 == 0: print("迭代次数", i) print("预测概率:", y_pred) print("权重:", theta) cost = calc_error(y_pred, y_label) list_cost.append(cost) print("最终成本列表:", list_cost) return theta, list_cost, y_pred # 预测验证集 def classify(y_test): return np.around(y_test) def predict(x_test, theta): y_test = np.dot(theta, np.transpose(x_test)) p = calc_sigmoid(y_test) print(p) return p # 测试数据准备 x_test = loan.iloc[500:, 1:10].values x_rows_test, x_columns_test = x_test.shape z_test = np.ones((x_rows_test, 1), dtype=float) x_test = np.append(x_test, z_test, axis=1) y_label_test = loan.loc[500:, "Status_New"].values y_label_test = y_label_test.astype(float) x_test = x_test.astype(float) y_test = predict(x_test, theta) y_test_pred_labels = classify(y_test)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485