sklearn线性逻辑回归和非线性逻辑回归的实现
线性逻辑回归(Linear Logistic Regression)与非线性逻辑回归是两种常见的分类算法,它们都是基于逻辑回归模型,主要用于处理二分类问题。逻辑回归的核心在于它将线性回归的结果通过sigmoid函数转化为介于0和1之间的概率值,代表某个类别的可能性。 在`sklearn`库中,逻辑回归的实现非常方便。对于线性逻辑回归,我们可以直接使用`LogisticRegression`类,设置参数`solver`为适合线性模型的求解器,如 `'liblinear'`。以下是一个简单的例子: ```python from sklearn.linear_model import LogisticRegression from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, recall_score, f1_score # 生成样本数据 X, y = make_classification(random_state=42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建并训练模型 model = LogisticRegression(solver='liblinear', random_state=42) model.fit(X_train, y_train) # 预测 y_pred = model.predict(X_test) # 评估 accuracy = accuracy_score(y_test, y_pred) recall = recall_score(y_test, y_pred) f1 = f1_score(y_test, y_pred) print(f"Accuracy: {accuracy * 100:.2f}%") print(f"Recall: {recall * 100:.2f}%") print(f"F1 Score: {f1 * 100:.2f}%") ``` 非线性逻辑回归(通常指的是使用非线性特征转换后的逻辑回归)则是通过增加数据的特征维度来实现非线性决策边界。例如,通过多项式特征转换,我们可以将原本线性的关系转化为非线性。在`sklearn`中,可以使用`PolynomialFeatures`类来完成这个过程,再配合逻辑回归模型: ```python from sklearn.preprocessing import PolynomialFeatures # 多项式特征转换 poly = PolynomialFeatures(degree=2) X_train_poly = poly.fit_transform(X_train) X_test_poly = poly.transform(X_test) # 使用转换后的数据训练模型 model_poly = LogisticRegression(solver='liblinear', random_state=42) model_poly.fit(X_train_poly, y_train) # 预测和评估 y_pred_poly = model_poly.predict(X_test_poly) accuracy_poly, recall_poly, f1_poly = accuracy_score(y_test, y_pred_poly), recall_score(y_test, y_pred_poly), f1_score(y_test, y_pred_poly) print(f"Accuracy (Non-linear): {accuracy_poly * 100:.2f}%") print(f"Recall (Non-linear): {recall_poly * 100:.2f}%") print(f"F1 Score (Non-linear): {f1_poly * 100:.2f}%") ``` 逻辑回归的代价函数通常是交叉熵损失(Cross-Entropy Loss),在训练过程中最小化这个损失以优化模型的权重。无论是线性还是非线性逻辑回归,它们的目标都是找到最佳的权重参数,使得模型对训练数据的预测概率尽可能接近实际标签。不过,非线性逻辑回归通过非线性变换增加了模型的表达能力,能够拟合更复杂的决策边界,从而可能在某些情况下获得更好的性能。 总结来说,线性逻辑回归适用于线性可分的问题,而非线性逻辑回归通过特征工程引入非线性关系,能够处理非线性可分的数据集。在实际应用中,选择哪种模型取决于数据的性质以及对模型复杂度的容忍度。在`sklearn`中,这两种模型的实现都非常直观且高效,为数据科学家提供了强大的工具。