python机器学习基础(二)

接上一篇:python机器学习基础教程(一)

一,构建第一个模型:

K近邻算法scikit-learn中有很多可用的分类算法。这里我们用的是K近邻分类器,这是一个很容易理解的算法。核心思想是:要对一个新的数据点作出预测,算法会在训练集中寻找与这个新数据点距离最近的数据点,然后将找到的数据点的标签赋值给这个新数据点。

K近邻算法中K的含义是,我们可以考虑训练期中与数据点最近的任意K个近邻,比如说距离最近的3个或5个邻居,而不是只考虑最近的那一个,然后我们可以用这些邻居中数据数量最多的类别作出预测,后面我会进一步介绍这个算法的细节,现在我们只考虑一个邻居的情况。

from sklearn.neighbors import KNeighborsClassifier
knn=KNeighborsclassifier(n_neighbors=1)

knn对象对算法进行了封装,既包括用训练数据构建模型的算法,也包括对新数据点进行预测算法。他还包括算法从训练数据中提取的信息,对于KNeighborsClassifier来说里面只保存了训练集。

想要基于训练集来构建模型,需要调用knn对象fit方法,输入参数为X_train和y_train,二者都是numpy数组,前者包含训练集后者包含训练集标签。

knn.fit(X_train,y_train)

在这里插入图片描述可以看到上面的输出结果是fit方法返回的knn对象本身,可以看到构建模型时用到的参数。几乎所有参数都是默认值,但你也会注意到n_neighbors=1是我们传入的参数。

二,做出预测

现在我们就可以用这个模型对新数据进行预测了。想象一下假如我们在野外发现了一朵莺尾花,花萼长5cm宽2.9cm,花瓣长1cm宽0.2cm,这朵莺尾花属于哪个品种?我们可以将这些数据放入Numpy数组中再次计算形状,数组形状为样本数(1)乘以特征数(4):

X_new=np.arry([[5, 2.9, 1, 0.2]])
print ("X_new.shape: {}".format(X_new.shape))

在这里插入图片描述注意:我们将这多朵花的数据转换成二位Numpy数组的一行,因为scikit-learn的输入数据必须是二维数组。

prediction=knn.predict(x_new)
print("prediction :{}".format(prediction))
print("predicted target name:{}".format(iris_dataset["target_names"][prediction]))

在这里插入图片描述根据我们模型的预测,这朵花属于类别0,也就是说它属于setosa品种。但我们能否信这个模型呢?这也是我们构建模型的重点。

三,评估模型

这里需要用到之前的测试集,这些数据没有用来构建模型,但我们知道测试集每朵花属于哪个品种。

因此,我们可以对测试集每朵花进行预测,然后将预测结果对比标签,通过计算精度来评估模型的优劣。精度就是品种预测正确的话所占的比例。

#模型预测
y_pred=knn.predict(x_test)
print("prediction :\n {}".format(y_pred))

在这里插入图片描述

print ("test set score:{:.2f}".format(np.mean(y_pred==y_test)))

在这里插入图片描述我们还可以用knn对象的score方法来计算测试集的精度:

print ("test set score :{:.2f}".format(knn.score(x_test,y_test)))

在这里插入图片描述对于这个模型来说,测试集的精度为0.97,也就是说我们对测试集中的莺尾花的预测,有97%是正确的。对于新的莺尾花可以认为我们的模型预测结果有97%是正确的。后面我们将讨论提高模型性能的方法,以及模型调参时应注意的事项。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值