:采用 scikit-learn 中的 LogisticRegression 逻辑回归模型对非线性数据集进行分类)特征衍生(数据增强):使用 sklearn 自带 sklearn.preprocessing.PolynomialFeatures 生成指 定阶次的多项式特征,从而得到所有多项式组合成的新特征矩阵,degree 参数使用for循环。 具体内容: (1)数据集:使用 sklearn 自带数据生成器 make_moons 产生两类数据样本,, )模型建立:在新特征基础上建立逻辑回归二分类模型。 (4)决策边界可视化:绘制决策边界,观察非线性边界的变化
时间: 2024-02-23 12:01:58 浏览: 19
好的,您的问题是如何使用逻辑回归模型对非线性数据集进行分类,并使用 sklearn.preprocessing.PolynomialFeatures 进行特征衍生,最后绘制决策边界?
首先,我们需要导入所需的库和模块:
```python
from sklearn.datasets import make_moons
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as plt
import numpy as np
```
接下来,我们使用 make_moons 函数生成两类非线性数据样本:
```python
X, y = make_moons(n_samples=100, noise=0.15, random_state=42)
```
然后,我们使用 PolynomialFeatures 函数对数据进行特征衍生,生成指定阶次的多项式特征:
```python
degrees = [1, 2, 3, 4, 5] # 多项式阶次
for degree in degrees:
polynomial_features = PolynomialFeatures(degree=degree, include_bias=False)
logistic_regression = LogisticRegression(max_iter=1000)
pipeline = Pipeline([("polynomial_features", polynomial_features),
("logistic_regression", logistic_regression)])
pipeline.fit(X, y)
score = pipeline.score(X, y)
plt.figure(figsize=(6, 4))
plt.title("Degree = {}\nAccuracy = {:.2f}".format(degree, score))
plt.xlabel("$x_1$")
plt.ylabel("$x_2$")
plt.xlim(-1.5, 2.5)
plt.ylim(-1, 1.5)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.RdBu, edgecolor="black")
xx, yy = np.meshgrid(np.linspace(-1.5, 2.5, 1000), np.linspace(-1, 1.5, 1000))
Z = pipeline.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contour(xx, yy, Z, levels=[0.5], colors="green")
plt.show()
```
对于每个阶次的多项式特征,我们都建立了一个 Pipeline,其中包含 PolynomialFeatures 和 LogisticRegression 两个步骤。然后,我们使用 Pipeline.fit 函数拟合模型,并使用 Pipeline.score 函数计算模型的准确率。最后,我们绘制样本点和决策边界。
结果如下图所示,可以看出,随着多项式特征阶次的增加,决策边界变得更加复杂,但也更容易出现过拟合的情况。
![image.png](attachment:image.png)