本文源自于Kevin Markham 的模型评估:https://github.com/justmarkham/scikit-learn-videos/blob/master/05_model_evaluation.ipynb

应办事项:
  1. 我的监督学习应该使用哪一个模型
  2. 我的模型中应该选择那些调整参数
  3. 如何估计模型在样本数据外的表现
评论:
  1. 分类任务:预测未知鸢尾花的种类
  2. 用三个分类模型:KNN(K=1),KNN(K=5),逻辑回归
  3. 需要一个选择模型的方法:模型评估

1. 训练测试整个数据集


在整个数集上进行训练,然后用同一个数集进行测试,评估准确度。
  1 from sklearn.datasets import load_iris
2 from sklearn.linear_model import LogisticRegression
3
4 # 1.read in the iris data
5 iris=load_iris()
6 X=iris.data
7 Y=iris.target
8 # print(X)
9 # print(Y)
10
11 # 2.logistic regression
12 logreg=LogisticRegression()
13 logreg.fit(X,Y)
14 y_pred=logreg.predict(X)
15 print(len(y_pred))
输出结果:
 
会发现有两个warning,但不影响结果,强迫症表示消灭红字。
分析和查阅logisticregression
将 logreg=LogisticRegression() 改为 logreg=LogisticRegression(solver='liblinear',multi_class='ovr') 即可。
 
三者初步比较:
 from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
from sklearn.neighbors import KNeighborsClassifier # 1.read in the iris data
iris=load_iris()
X=iris.data
Y=iris.target
# print(X)
# print(Y) # 2.logistic regression
logreg=LogisticRegression(solver='liblinear',multi_class='ovr')
logreg.fit(X,Y)
y_logreg_pred=logreg.predict(X)
print(len(y_logreg_pred))
print(metrics.accuracy_score(Y,y_logreg_pred)) # 3.KNN=5
knn=KNeighborsClassifier(n_neighbors=5)
knn.fit(X,Y)
y_knn5_pred=knn.predict(X)
print(len(y_knn5_pred))
print(metrics.accuracy_score(Y,y_knn5_pred)) # 4.KNN=1
knn=KNeighborsClassifier(n_neighbors=1)
knn.fit(X,Y)
y_knn1_pred=knn.predict(X)
print(len(y_knn1_pred))
print(metrics.accuracy_score(Y,y_knn1_pred))
输出结果:
问题:
  1. 目标是评测模型样本以外的数据表现
  2. 但是,最大化培训精度奖励过于复杂的模型,模型不能泛化
  3. 不必要的复杂模型过度拟合

2. 分开训练和测试集


将数据集一分为二,一部分用于训练,另一部分用于测试。

 from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split # 1.read in the iris data
iris=load_iris()
X=iris.data
Y=iris.target # 2.split X,Y
x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.4,random_state=4)
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape) # 3.logistic regression
logreg=LogisticRegression(solver='liblinear',multi_class='ovr')
logreg.fit(x_train,y_train)
y_logreg_pred=logreg.predict(x_test)
print(metrics.accuracy_score(y_test,y_logreg_pred)) # 3.KNN=5
knn=KNeighborsClassifier(n_neighbors=5)
knn.fit(x_train,y_train)
y_knn5_pred=knn.predict(x_test)
print(metrics.accuracy_score(y_test,y_knn5_pred)) # 4.KNN=1
knn=KNeighborsClassifier(n_neighbors=1)
knn.fit(x_train,y_train)
y_knn1_pred=knn.predict(x_test)
print(metrics.accuracy_score(y_test,y_knn1_pred))
输出结果:
 
观察不同的KNN中的k值对准确度会有什么影响。
 
 import matplotlib.pyplot as plt
# print(k_range)
scores=[]
for k in k_range:
knn=KNeighborsClassifier(n_neighbors=k)
knn.fit(x_train,y_train)
y_knnk_pred=knn.predict(x_test)
scores.append(metrics.accuracy_score(y_test,y_knnk_pred))
plt.plot(k_range,scores)
plt.xlabel('value of k for KNN')
plt.ylabel('testing accurancy')
plt.show()

输出结果:

从上可以观察出k的取值对准确度的影响,k太小或太大都不是最佳值。

3. 预测


取k=11(7~16)。

 # 6.predict
knn=KNeighborsClassifier(n_neighbors=11)
knn.fit(x_train,y_train)
y_pred=knn.predict([[3,5,4,2]])
print(y_pred)

输出结果:

 
 

scikit-learn中机器学习模型比较(逻辑回归与KNN)的更多相关文章

  1. (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探

    一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...

  2. 机器学习总结之逻辑回归Logistic Regression

    机器学习总结之逻辑回归Logistic Regression 逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分类问题如下: 回归问 ...

  3. 机器学习入门11 - 逻辑回归 (Logistic Regression)

    原文链接:https://developers.google.com/machine-learning/crash-course/logistic-regression/ 逻辑回归会生成一个介于 0 ...

  4. 【机器学习基础】逻辑回归——LogisticRegression

    LR算法作为一种比较经典的分类算法,在实际应用和面试中经常受到青睐,虽然在理论方面不是特别复杂,但LR所牵涉的知识点还是比较多的,同时与概率生成模型.神经网络都有着一定的联系,本节就针对这一算法及其所 ...

  5. PRML读书会第四章 Linear Models for Classification(贝叶斯marginalization、Fisher线性判别、感知机、概率生成和判别模型、逻辑回归)

    主讲人 planktonli planktonli(1027753147) 19:52:28 现在我们就开始讲第四章,第四章的内容是关于 线性分类模型,主要内容有四点:1) Fisher准则的分类,以 ...

  6. Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression & Regularization

    原文:http://blog.csdn.net/abcjennifer/article/details/7716281 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...

  7. Spark机器学习(2):逻辑回归算法

    逻辑回归本质上也是一种线性回归,和普通线性回归不同的是,普通线性回归特征到结果输出的是连续值,而逻辑回归增加了一个函数g(z),能够把连续值映射到0或者1. MLLib的逻辑回归类有两个:Logist ...

  8. 使用SKlearn(Sci-Kit Learn)进行SVR模型学习

    今天了解到sklearn这个库,简直太酷炫,一行代码完成机器学习. 贴一个自动生成数据,SVR进行数据拟合的代码,附带网格搜索(GridSearch, 帮助你选择合适的参数)以及模型保存.读取以及结果 ...

  9. 【Todo】用python进行机器学习数据模拟及逻辑回归实验

    参考了这个网页:http://blog.csdn.net/han_xiaoyang/article/details/49123419 数据用了 https://pan.baidu.com/s/1pKx ...

随机推荐

  1. JS继承以及继承的几种实现方式总结

    传统面向对象语言:继承是类与类之间的关系. 而在js中由于es6之前没有类的概念,所以继承是对象与对象之间的关系. 在js中,继承就是指使一个对象有权去访问另一个对象的能力. 比如:比如对象a能够访问 ...

  2. python_正则表达式随笔

    webpage_regex = re.search(r'span_ed7[\s\S]*', dd) [\s\S]* 匹配多行,转义字符 webpage_regex = re.compile('< ...

  3. Error:Failed to resolve: com.android.support.constraint:constraint-layout:1.0.2

    可以换个maven库: allprojects { repositories { jcenter() //maven { url "https://jitpack.io" } ma ...

  4. vue项目笔记

    参考了很多网上其他人的 1.安装 npm与cnpm:npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装.卸载.管理依赖等):npm可以在node ...

  5. BZOJ2406矩阵——有上下界的可行流+二分答案

    题目描述 输入 第一行两个数n.m,表示矩阵的大小. 接下来n行,每行m列,描述矩阵A. 最后一行两个数L,R. 输出 第一行,输出最小的答案: 样例输入 2 2 0 1 2 1 0 1 样例输出 1 ...

  6. Educational Codeforces Round 62 Div. 2

    突然发现上一场edu忘记写了( A:签到. #include<iostream> #include<cstdio> #include<cmath> #include ...

  7. 《java核心技术36讲》学习笔记-------杨晓峰(极客时间)

    非常荣幸作为晓峰哥的同事,之前就看过这篇文章,重写读一遍,再学习学习. 一.开篇词 初级.中级:java和计算机科学基础.开源框架的使用:高级.专家:java io/nio.并发.虚拟机.底层源码.分 ...

  8. openflow packet_out和packet_in分析

    任务目的 1. 掌握OpenFlow交换机发送Packet-in消息过程及其消息格式. 2. 掌握OpenFlow控制器发送Packet-out消息过程及其消息格式. 实验原理 Packet-In 使 ...

  9. Floyd-蒟蒻也能看懂的弗洛伊德算法(当然我是蒟蒻)

    今天来讲点图论的知识,来看看最短路径的一个求法(所有的求法我以后会写,也有可能咕咕咕) 你们都说图看着没意思不好看,那今天就来点情景             暑假,_GC准备去一些城市旅游.有些城市之 ...

  10. 078、Docker 最常用的监控方案(2019-04-25 周四)

    参考https://www.cnblogs.com/CloudMan6/p/7637361.html   当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态会变得越来越重要.   ...