本文源自于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. servlet(1)

    servlet类分级: 1.ServletConfig接口类:理解为读取servlet配置的类,里面有四个抽象方法如下: ①getServletName:获取servlet在web.xml中的名字 ② ...

  2. vue router 修改title(IOS 下动态改变title失效)

    在ios下app  设置document.title = "titleName" 失效,原因是在IOS webview中网页标题只加载一次,动态改变是无效的. 在路由配置中添加   ...

  3. 【THUSC2017】【LOJ2981】如果奇迹有颜色 DP BM 打表 线性递推

    题目大意 有一个 \(n\) 个点的环,你要用 \(m\) 中颜色染这 \(n\) 个点. 要求连续 \(m\) 个点的颜色不能是 $1 \sim m $ 的排列. 两种环相同当且仅当这两个环可以在旋 ...

  4. 【AGC030F】Permutation and Minimum DP

    题目大意 有一个长度为序列 \(a\),其中某些位置的值是 \(-1\). 你要把 \(a\) 补成一个排列. 定义 \(b_i=\min(a_{2i-1},a_{2i})\),求有多少种可能的 \( ...

  5. Spring Boot学习总结三

    1,mybatis在spring boot下的2种使用模式 无配置文件注解版 application.properties添加相关配置 mybatis.type-aliases-package=com ...

  6. golang中使用mysql数据库

    安装 安装mysql驱动 go get github.com/go-sql-driver/mysql 安装sqlx驱动 go get github.com/jmoiron/sqlx 一.插入数据库 p ...

  7. 【实用Windows双系统一键备份还原工具】Winclone Pro for Mac

    [简介] 今天和大家分享最新的 Winclone Pro 7.3.3 Mac 版本,这是一款Mac上强大易用的Windows分区备份还原工具,类似于Windows上的一键Ghost,能够将 PC 上的 ...

  8. (七) UVC框架分析

    title: UVC框架分析 date: 2019/4/23 19:50:00 toc: true --- UVC框架分析 源码的位置在drivers\media\video\uvc,查看下Makef ...

  9. 【SQL学习笔记】一、select语句

    SQL有别于其他的编程语言的一点在于首先处理的并不是写在第一行的语句(select),而是from字句. 为了更详细的了解select语句的每个部分,举例如下: 该语句返回的结果是下订单超过4次的女顾 ...

  10. javascript 事件冒泡和事件代理

    事件冒泡 简单的讲,当子元素的事件处理函数被触发(如onclick),该事件会从事件源(当前子元素)逐级向上层元素传递,触发祖先元素的 onclik 事件,一直到最外层 html 根元素. 这可能会带 ...