本章的几个概念:

估计器(estimator) 用于分类、聚类和回归分析
          转换器(transformer):用于数据预处理回来数据转换
          流水线(pipeline): 组合数据挖掘流程, 便于在此使用

1.scikit-learn估计器

数据集下载地址:UCI

加载数据集:

#coding=gbk
#python 数据挖掘入门与实践
#第2章: 使用scikit-learn 估计器分类 #估计器(estimator) 用于分类、聚类和回归分析
#转换器(transformer):用于数据预处理回来数据转换
#流水线(pipeline): 组合数据挖掘流程, 便于在此使用
import numpy as np
import csv
X = np.zeros((351,34), dtype = 'float')
y = np.zeros((351,), dtype = 'int') #原文中dtype 为'float' ,此处应该为 int 类型,其自动将true 转换成 1 ,false转换成 0 #加载数据集
with open(r'D:\datasets\ionosphere.csv','r') as input_file:
reader = csv.reader(input_file)
for i , row in enumerate(reader):
data = [float(datum) for datum in row[:-1]] #将前34个特征保存到x 中
X[i]= data
y[i] = row[-1]=='g' #把字母型转换成数值型
print(X[:5])
print(y[:9])

实现流程的标准化:

#创建训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state= 14) from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier() #使用KNN 算法
knn.fit(X_train, y_train)
y_predicted = knn.predict(X_test)
accuracy = np.mean(y_predicted == y_test) *100
print('the accuracy is %.1f'%accuracy) # the accuracy is 86.4 #使用交叉验证
from sklearn.model_selection import cross_val_score
scores = cross_val_score(knn, X, y, scoring= 'accuracy')
average_score = np.mean(scores) * 100
print('the average accuracy is %.1f'%average_score+'%') # the average accuracy is 82.3%
#作者say:考虑到还没有进行调参数, 这个结果还是相当不错

设置参数:

#设置参数

#测试一系列的n_neighbors 一系列的值, 进行重复多次试验, 观察参数值带来的结果之间的差异
ave_score =[]
all_score = []
for n_neighbors in range(1,21):
estimator = KNeighborsClassifier(n_neighbors=n_neighbors)
scores = cross_val_score(estimator, X, y, scoring= 'accuracy')
all_score.append(scores)
ave_score.append(np.mean(scores)) print(ave_score) import matplotlib.pyplot as plt
x1 = range(1,21)
plt.plot(x1, ave_score, '-o')
plt.show() #有图知道, 随着 K 值得增大 , 整体的正确率趋势是下降的

2.流水线在预处理中的使用

不同特征的取值范围千差万别, 常见的方法是对不同的特征进行规范化,使他们的特征值落在相同的值域或者是属于某几个确定的类别
一旦解决这个问题, 不同的特征类型对算法的影响将大大降低, 分类的正确率就有大大的提升
sckit-learn 的预处理工具 称为 转换器(Transfomer),它接受原始数据集, 返回的是转换后的数据集。除了,处理数值型的特征还能用于抽取特征

X_broken = np.array(X)
X_broken[:,::2] /=10 #每隔一行, 就把第二个特征的值除以10 knn2 = KNeighborsClassifier()
broken_score = cross_val_score(knn2, X_broken, y, scoring='accuracy')
ave_broken_score = np.mean(broken_score)
print('the broken score accuracy is %.3f'%ave_broken_score) # the broken score accuracy is 0.715 #将特征值转换成 0 到1 之间,以解决问题
#标准预处理:使用MinMaxScalar 类进行规范化处理,规范到0到1 之间 #对X 进行预处理, 有些转换器要求像训练分类器那样先进行训练, 但是MinMaxScalar 不需要, 直接调用 fit_transform 函数,即可以完成训练和转换
from sklearn.preprocessing import MinMaxScaler
X_transform = MinMaxScaler().fit_transform(X_broken) knn2 = KNeighborsClassifier()
transform_scores = cross_val_score(knn2, X_transform, y, scoring='accuracy')
ave_transform_scores = np.mean(transform_scores) * 100
#MinMaxScaler 将特征规范到相同的值域, 这样特征就不会仅仅因为值大二具备更强的区分度
print('the x_transformed average score is %.2f'%ave_transform_scores) #the x_transformed average score is 82.34 #流水线
#流水线的输入为一系列的数据挖掘的步骤, 其中最后一步必须是估计器, 前几部是转换器。
from sklearn.pipeline import Pipeline
scailing_pipeline = Pipeline([('scale', MinMaxScaler()),
('knn', KNeighborsClassifier())])
scores1 = cross_val_score(scailing_pipeline, X_broken, y, scoring= 'accuracy')
pipeline_score = np.mean(scores1) *100
print('the accuracy is %.2f'%pipeline_score+'%') # the accuracy is 82.34% 与上式结果是一样的

使用scikit-learn 估计器分类的更多相关文章

  1. scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)

    scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...

  2. Scikit Learn: 在python中机器学习

    转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...

  3. (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探

    目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...

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

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

  5. Scikit Learn

    Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.

  6. Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)

    所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的 ...

  7. 机器学习-scikit learn学习笔记

    scikit-learn官网:http://scikit-learn.org/stable/ 通常情况下,一个学习问题会包含一组学习样本数据,计算机通过对样本数据的学习,尝试对未知数据进行预测. 学习 ...

  8. Linear Regression with Scikit Learn

    Before you read  This is a demo or practice about how to use Simple-Linear-Regression in scikit-lear ...

  9. 集成算法(chapter 7 - Hands on machine learning with scikit learn and tensorflow)

    Voting classifier 多种分类器分别训练,然后分别对输入(新数据)预测/分类,各个分类器的结果视为投票,投出最终结果: 训练: 投票: 为什么三个臭皮匠顶一个诸葛亮.通过大数定律直观地解 ...

随机推荐

  1. linux中,查看某个命令是来自哪个RPM包或者是通过哪个RPM包安装的

    需求描述: 今天在测试ssh命令到底是哪个RPM包,安装之后生成的,找了一些文档 在这里进行记录下,主要是rpm -qf命令的使用,查询文件在哪个包里. 操作过程: 1.通过whereis 定位ssh ...

  2. 九度 1547 出入栈(递推DP)

    题目描述: 给定一个初始为空的栈,和n个操作组成的操作序列,每个操作只可能是出栈或者入栈.要求在操作序列的执行过程中不会出现非法的操作,即不会在空栈时执行出栈操作,同时保证当操作序列完成后,栈恰好为一 ...

  3. ios 显示代码块(show the code snippet library)

    在项目的实际开发中,我们会重复的书写很多的代码,我经常是需要用到某一个功能,就从以前的项目中复制粘贴过来,很是麻烦 下面就为大家提供两种不错的方法, 一.宏定义,这个大家应该很熟悉,在这里就不做多的介 ...

  4. Windows7安装Mongodb

    1.安装mongodb-win32-x86_64-3.0.4-signed.msi 2.安装kb2731284 安装补丁:Windows6.1-KB2731284-v3-x64.msu 3.创建数据库 ...

  5. python2.0_s12_day9之day8遗留知识(queue队列&生产者消费者模型)

    4.线程 1.语法 2.join 3.线程锁之Lock\Rlock\信号量 4.将线程变为守护进程 5.Event事件 * 6.queue队列 * 7.生产者消费者模型 4.6 queue队列 que ...

  6. php截取中文字符串时乱码问题

    <?php function chinesesubstr($str,$start,$len) { //$str指字符串,$start指字符串的起始位置,$len指字符串长度 $strlen=$s ...

  7. img标签-srcset属性

    今天看前辈的代码时,发现img标签有个陌生的srcset属性,如下: 1 <img class="Avatar" src="https://pic3.zhimg.c ...

  8. windows 上驱动阻止关机重启操作

    Windows 上关机重启有很多相关的操作 HOOK 一个点搞不定  具体需要以下 4 处来布控 SSDT HOOK NtInitiatePowerAction 函数 ,直接返回失败废掉这个函数 SS ...

  9. <转>KMP算法详解

    看了好久的KMP算法,都一直没有看明白,直到看到了这篇博客http://www.tuicool.com/articles/e2Qbyyf让我瞬间顿悟. 如果你看不懂 KMP 算法,那就看一看这篇文章 ...

  10. LeetCode——Generate Parentheses

    Description: Given n pairs of parentheses, write a function to generate all combinations of well-for ...