sklearn机器学习(一)绘制学习曲线

今天开始学习scikit—learn机器学习的书上面的。
这是通过三个不同的多项式,一阶多项式,三阶多项式,十阶多项式来比较出机器学习中欠拟合,正常,过拟合的三种状态。个人学习记录
以下是生成数据部分

import matplotlib.pyplot as plt
import numpy as np
n_dots=200
#下面两行就是在生成数据集
X=np.linspace(0,1,n_dots)#从0到1之间生成两百个数。
y=np.sqrt(X)+0.2*np.random.rand(n_dots)-0.1;
#下面两行就是n_sample * n_feature的矩阵,将其特征固定为1,其中-1的意思就是全部
X=X.reshape(-1,1)
y=y.reshape(-1,1)

以下是生成多项式模型生成部分

ffrom sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

def polynomial_model(degree=1):#degrees代表的是多项式阶数
    polynomial_features=PolynomialFeatures(degree=degree,include_bias=False)#模型生成,没有偏差
    linear_regression=LinearRegression()#线性回归算法
    pipeline=Pipeline([("polynomial_features",polynomial_features),("linear_regression",linear_regression)])
    #流水线生产多项式模型,之后使用线性回归拟合数据
    return pipeline

以下是学习曲线的绘制
是随机从数据集中分配出训练样本和交叉验证样本,这样会导致数据分布不均匀。
同样训练样本数量的模型,由于随机分配,导致每次计算出来的准确性都不一样。
我们在计算模型的准确性是多次计算,并求准确性的平均值和方差。

from sklearn.model_selection import learning_curve
from sklearn.model_selection import ShuffleSplit

def plot_learning_curve(estimator,title,X,y,ylim=None,cv=None,n_jobs=1,train_sizes=np.linspace(0.1,1.0,5)):
    plt.title(title)#图像标题
    if ylim is not None:#y轴限制不为空时
        plt.ylim(*ylim)
    plt.xlabel("Training examples")#两个标题
    plt.ylabel("Score")
    train_sizes,train_scores,test_scores=learning_curve(estimator,X,y,cv=cv,n_jobs=n_jobs,train_sizes=train_sizes)#获取训练集大小,训练得分集合,测试得分集合
    train_scores_mean=np.mean(train_scores,axis=1)#将训练得分集合按行的到平均值
    train_scores_std=np.std(train_scores,axis=1)#计算训练矩阵的标准方差
    test_scores_mean=np.mean(test_scores,axis=1)
    test_scores_std=np.std(test_scores,axis=1)
    plt.grid()#背景设置为网格线
    
    plt.fill_between(train_sizes,train_scores_mean-train_scores_std,train_scores_mean+train_scores_std,alpha=0.1,color='r')
    # plt.fill_between()函数会把模型准确性的平均值的上下方差的空间里用颜色填充。
    plt.fill_between(train_sizes,test_scores_mean-test_scores_std,test_scores_mean+test_scores_std,alpha=0.1,color='g')
    plt.plot(train_sizes,train_scores_mean,'o-',color='r',label='Training score')
    # 然后用plt.plot()函数画出模型准确性的平均值
    plt.plot(train_sizes,test_scores_mean,'o-',color='g',label='Cross_validation score')
    plt.legend(loc='best')#显示图例
    return plt

以下是模型的测试

cv = ShuffleSplit(n_splits=10, test_size=0.2, random_state=0)
#交叉验证类进行十次迭代,测试集占0.2,其余的都是训练集
titles = ['Learning Curves(Under Fitting)', 'Learning Curves', 'Learning Curves(Over Fitting)']
degrees = [1, 3, 10]#多项式的阶数
plt.figure(figsize=(18, 4), dpi=200)#设置画布大小,dpi是每英寸的像素点数
for i in range(len(degrees)):#循环三次
    plt.subplot(1, 3, i + 1)#下属三张画布,对应编号为i+1
    plot_learning_curve(polynomial_model(degrees[i]), titles[i], X, y, ylim=(0.75, 1.01), cv=cv)#开始绘制曲线

plt.show()#显示

最后的输出
在这里插入图片描述

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 以下是机器学习Python绘制PR曲线的示例代码: ```python from sklearn.metrics import precision_recall_curve import matplotlib.pyplot as plt import numpy as np y_true = np.array([0, 0, 1, 1, 1]) y_scores = np.array([0.1, 0.4, 0.35, 0.8, 0.9]) precision, recall, thresholds = precision_recall_curve(y_true, y_scores) plt.plot(recall, precision, linestyle='--', label='PR curve') plt.xlabel('Recall') plt.ylabel('Precision') plt.legend() plt.show() ``` 其中,y_true表示真实标签,y_scores表示模型输出的预测概率。precision_recall_curve函数会返回一组精确率、召回率和阈值,我们将这些数据绘制成PR曲线即可。 ### 回答2: PR曲线是二元分类模型性能评估的重要指标之一,它可以衡量出在"有多少真实的数据预测成正样本的同时预测对了多少个真实的正样本"的性能,适用于不平衡数据集的情况。 在Python中,我们可以利用sklearn库,调用precision_recall_curve()函数绘制PR曲线。具体步骤如下: 1. 导入必要的库 ``` import matplotlib.pyplot as plt from sklearn.metrics import precision_recall_curve from sklearn.metrics import plot_precision_recall_curve ``` 2. 准备数据集 假设我们有一个二分类数据集,标签为1表示正样本,标签为0表示负样本。我们可以从csv文件中读取数据,或者利用一些数据生成的方法。 ``` X, y = make_classification(n_samples=10000, n_classes=2, weights=[0.95,0.05], random_state=42) ``` 3. 拆分数据集 由于绘制PR曲线需要使用测试集,所以我们需要把数据集拆分成训练集和测试集。 ``` from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 4. 训练模型 利用我们选择的二分类模型,例如Logistic回归或者随机森林模型等,从训练数据集中训练一个模型。 ``` from sklearn.ensemble import RandomForestClassifier clf = RandomForestClassifier(n_estimators=100, random_state=42) clf.fit(X_train, y_train) ``` 5. 绘制PR曲线 利用precision_recall_curve()函数计算每个阈值下的准确率和召回率,然后绘制出PR曲线。 ``` disp = plot_precision_recall_curve(clf, X_test, y_test) plt.show() ``` 以上是用Python绘制PR曲线的基本步骤,你可以根据实际需要进行微调和优化。 ### 回答3: PR曲线机器学习中用于评估二分类模型性能的重要指标之一。它是Precision与Recall的关系曲线,通过绘制Precision与Recall的关系曲线可以更直观、准确地评估模型性能。在Python中,我们可以使用Scikit-Learn库的以下函数来绘制PR曲线: from sklearn.metrics import precision_recall_curve import matplotlib.pyplot as plt # 假设y_true为真实标签,y_scores为分类模型输出的概率值 precision, recall, thresholds = precision_recall_curve(y_true, y_scores) # 绘制PR曲线图 plt.plot(recall, precision, label='PR curve') plt.xlabel('Recall') plt.ylabel('Precision') plt.title('Precision-Recall Curve') plt.legend(loc='best') plt.show() 其中,y_true为真实标签,y_scores为分类模型输出的概率值。函数precision_recall_curve可以返回precision、recall以及每个阈值的数值,即thresholds,这些数值可以用于后续的计算或可视化操作。绘制PR曲线使用Matplotlib库的plot函数,将recall作为横坐标、precision作为纵坐标,即可得到PR曲线。对于PR曲线的图像优化可以用title函数来添加标题,用xlabel和ylabel函数进行轴标签的添加以及legend函数添加图例。最后将PR曲线图用show函数显示。 绘制PR曲线,是对模型在正例(positive)和负例(negative)两个方面的表现都进行评估的一种方法,可以帮助用户更准确地判断模型的性能,具有重要的应用价值和研究意义。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值