给定申请学生的两次考试成绩和最终录取的结果,构建模型预测某个学生是否能被大学录取。方法一:逻辑回归要求:(1)说明其原理,包括但不限于“sigmoid 函数”、“损失函数”、“优化方法”、“模型评价”等。(2)绘出样本可视化图,如下图所示:构建模型,列出详细参数运行画出决策边界
时间: 2024-05-07 18:22:27 浏览: 131
方法一:
1.原理:
逻辑回归是一种广泛应用于分类问题的模型,它假设一个线性函数与输入特征进行组合,并通过sigmoid函数将其转换为0到1之间的概率值。sigmoid函数的公式为:
$$h_{\theta}(x)=\frac{1}{1+e^{-\theta^{T}x}}$$
其中,$\theta$表示模型参数,$x$是输入特征。
逻辑回归使用交叉熵损失函数来衡量预测值和实际值之间的差异。交叉熵损失函数的公式为:
$$J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}log(h_{\theta}(x^{(i)}))+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]$$
其中,$m$是样本数量,$y^{(i)}$是真实标签,$x^{(i)}$是第$i$个样本的特征。
逻辑回归通常使用梯度下降法来最小化损失函数。梯度下降法的公式为:
$$\theta_{j}=\theta_{j}-\alpha\frac{\partial J(\theta)}{\partial\theta_{j}}$$
其中,$\alpha$是学习率,$\theta_{j}$是第$j$个参数。
模型评价通常使用准确率、精确率、召回率、F1值等指标来评估模型的性能。
2.样本可视化:
下图展示了一些样本数据的分布情况。其中,蓝色的点表示被录取的学生,红色的点表示未被录取的学生。
![image.png](attachment:image.png)
3.构建模型:
我们可以使用sklearn库中的LogisticRegression类来构建逻辑回归模型。在构建模型之前,我们需要将数据集拆分为训练集和测试集,并进行数据标准化处理。
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 读取数据集
data = np.loadtxt('data.txt', delimiter=',')
X = data[:, :-1]
y = data[:, -1]
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 数据标准化
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
# 构建逻辑回归模型
classifier = LogisticRegression(random_state=0)
classifier.fit(X_train, y_train)
```
4.绘制决策边界:
我们可以使用Matplotlib库来绘制决策边界。首先,我们需要定义一个函数来绘制样本数据的散点图,然后再绘制决策边界。
```python
# 定义绘制散点图函数
def plot_scatter(X, y):
plt.scatter(X[y == 0, 0], X[y == 0, 1], color='red', label='Not admitted')
plt.scatter(X[y == 1, 0], X[y == 1, 1], color='blue', label='Admitted')
plt.xlabel('Exam 1 score')
plt.ylabel('Exam 2 score')
plt.legend()
# 绘制样本数据散点图
plot_scatter(X, y)
# 绘制决策边界
x1_min, x1_max = X[:, 0].min(), X[:, 0].max()
x2_min, x2_max = X[:, 1].min(), X[:, 1].max()
xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max))
Z = classifier.predict(sc.transform(np.c_[xx1.ravel(), xx2.ravel()]))
Z = Z.reshape(xx1.shape)
plt.contourf(xx1, xx2, Z, alpha=0.3)
plt.colorbar()
```
完整代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 读取数据集
data = np.loadtxt('data.txt', delimiter=',')
X = data[:, :-1]
y = data[:, -1]
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 数据标准化
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
# 构建逻辑回归模型
classifier = LogisticRegression(random_state=0)
classifier.fit(X_train, y_train)
# 定义绘制散点图函数
def plot_scatter(X, y):
plt.scatter(X[y == 0, 0], X[y == 0, 1], color='red', label='Not admitted')
plt.scatter(X[y == 1, 0], X[y == 1, 1], color='blue', label='Admitted')
plt.xlabel('Exam 1 score')
plt.ylabel('Exam 2 score')
plt.legend()
# 绘制样本数据散点图
plot_scatter(X, y)
# 绘制决策边界
x1_min, x1_max = X[:, 0].min(), X[:, 0].max()
x2_min, x2_max = X[:, 1].min(), X[:, 1].max()
xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max))
Z = classifier.predict(sc.transform(np.c_[xx1.ravel(), xx2.ravel()]))
Z = Z.reshape(xx1.shape)
plt.contourf(xx1, xx2, Z, alpha=0.3)
plt.colorbar()
# 显示图形
plt.show()
```
运行代码后,我们可以得到如下的决策边界图:
![image-2.png](attachment:image-2.png)
阅读全文