题目三:采用 scikit-learn 中的 LogisticRegression 逻辑回归模型对非线性数据集进行分类。 具体内容: (1)数据集:使用 sklearn 自带数据生成器 make_moons 产生两类数据样本,示例程序如下, 参数可自行修改。 (2)特征衍生(数据增强):使用 sklearn 自带 sklearn.preprocessing.PolynomialFeatures 生成指 定阶次的多项式特征,从而得到所有多项式组合成的新特征矩阵,degree 参数任选。(3)模型建立:在新特征基础上建立逻辑回归二分类模型。 (4)决策边界可视化:绘制决策边界,观察非线性边界的变化。 【讨论二】在不加正则项的情况下,改变特征衍生的特征数量(即 degree 参数),观察决策边 界的变化情况,以及训练集和测试集分数,体会模型从欠拟合 ->拟合 ->过拟合的过程。 提示:可使用 for 循环对不同 degree 进行遍历,观察模型的建模结果。
时间: 2024-02-17 08:01:02 浏览: 20
好的,下面是代码实现:
```
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.model_selection import train_test_split
# 生成数据集
X, y = make_moons(n_samples=200, noise=0.1, random_state=1)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
# 不同阶次的多项式特征
degrees = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 绘制决策边界
plt.figure(figsize=(20, 10))
for i, degree in enumerate(degrees):
# 创建管道模型
polynomial_logistic_regression = Pipeline([
("poly_features", PolynomialFeatures(degree=degree)),
("logistic_regression", LogisticRegression(random_state=1))
])
# 模型训练
polynomial_logistic_regression.fit(X_train, y_train)
# 绘制决策边界
plt.subplot(2, 5, i+1)
plt.title("Degree {}".format(degree))
plt.scatter(X[:, 0], X[:, 1], c=y, cmap="coolwarm", edgecolors="k")
xx, yy = np.meshgrid(np.linspace(-2, 3, 500), np.linspace(-1.5, 2, 500))
Z = polynomial_logistic_regression.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap="coolwarm", alpha=0.2)
plt.xlim(-2, 3)
plt.ylim(-1.5, 2)
plt.xticks(())
plt.yticks(())
# 输出模型在训练集和测试集上的得分
print("Degree {}: train score: {:.3f}, test score: {:.3f}"
.format(degree, polynomial_logistic_regression.score(X_train, y_train),
polynomial_logistic_regression.score(X_test, y_test)))
plt.show()
```
这段代码实现了对非线性数据集进行分类,使用了逻辑回归模型,并且通过特征衍生(即数据增强)使用 sklearn.preprocessing.PolynomialFeatures 生成指定阶次的多项式特征,建立了在新特征基础上的逻辑回归二分类模型,并绘制了决策边界,观察非线性边界的变化。同时,在不加正则项的情况下,通过改变特征衍生的特征数量(即 degree 参数),观察决策边界的变化情况,以及训练集和测试集分数,体会模型从欠拟合 ->拟合 ->过拟合的过程。