python 从外部输入自创的数据集,数据集为3列200行,前两列分别为学生的两门课程成绩,最后一列为该学生是否被录取的结果,用0和1表示,1为录取,0为不录取,应用此数据集绘制散点图实现数据可视化、使用留出法划分数据集并使用sklearn完成逻辑回归训练,绘制ROC曲线、绘制决策边界、绘制学习曲线
时间: 2024-02-28 16:54:00 浏览: 58
好的,我会依次回答你的问题。
对于第一个问题,你可以使用 pandas 库的 read_csv 方法来读取外部的数据集文件,并使用 matplotlib 库的 scatter 方法来绘制散点图,示例代码如下:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据集文件
data = pd.read_csv('data.csv', header=None)
# 绘制散点图
plt.scatter(data.iloc[:, 0], data.iloc[:, 1], c=data.iloc[:, 2])
plt.xlabel('Score 1')
plt.ylabel('Score 2')
plt.show()
```
其中,`data.csv` 是你的数据集文件路径,`data.iloc[:, 0]` 和 `data.iloc[:, 1]` 分别表示数据集的第一列和第二列,`data.iloc[:, 2]` 表示数据集的最后一列(即是否录取的结果),颜色用 0/1 表示。
对于第二个问题,你可以使用 sklearn 库的 train_test_split 方法将数据集划分为训练集和测试集,并使用 LogisticRegression 模型进行训练和预测,示例代码如下:
```python
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc
import numpy as np
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(data.iloc[:, :-1], data.iloc[:, -1], test_size=0.3, random_state=0)
# 训练模型
lr = LogisticRegression()
lr.fit(X_train, y_train)
# 预测
y_pred = lr.predict(X_test)
# 绘制ROC曲线
fpr, tpr, threshold = roc_curve(y_test, y_pred)
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, 'b', label='AUC = %0.2f' % roc_auc)
plt.legend(loc='lower right')
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0, 1])
plt.ylim([0, 1])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()
# 绘制决策边界
plt.scatter(data.iloc[:, 0], data.iloc[:, 1], c=data.iloc[:, 2])
x1_min, x1_max = data.iloc[:, 0].min(), data.iloc[:, 0].max()
x2_min, x2_max = data.iloc[:, 1].min(), data.iloc[:, 1].max()
xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max))
Z = lr.predict(np.c_[xx1.ravel(), xx2.ravel()])
Z = Z.reshape(xx1.shape)
plt.contour(xx1, xx2, Z, levels=[0], colors='k')
plt.show()
# 绘制学习曲线
from sklearn.model_selection import learning_curve
train_sizes, train_scores, test_scores = learning_curve(lr, data.iloc[:, :-1], data.iloc[:, -1], cv=10)
train_mean = np.mean(train_scores, axis=1)
train_std = np.std(train_scores, axis=1)
test_mean = np.mean(test_scores, axis=1)
test_std = np.std(test_scores, axis=1)
plt.plot(train_sizes, train_mean, 'o-', color='r', label='Training score')
plt.plot(train_sizes, test_mean, 'o-', color='g', label='Cross-validation score')
plt.fill_between(train_sizes, train_mean - train_std, train_mean + train_std, alpha=0.1, color='r')
plt.fill_between(train_sizes, test_mean - test_std, test_mean + test_std, alpha=0.1, color='g')
plt.xlabel('Training examples')
plt.ylabel('Score')
plt.ylim([0.5, 1.1])
plt.legend(loc='best')
plt.show()
```
其中,`test_size=0.3` 表示测试集占总数据集的 30%,`random_state=0` 表示随机种子,保证每次划分的结果一致。
对于第三个问题,你可以使用 contour 方法绘制决策边界,使用 sklearn 库的 learning_curve 方法绘制学习曲线。
希望我的回答能够帮助到你!
阅读全文