在从事数据科学的人中,最常用的工具就是R和Python了,每个工具都有其利弊,但是Python在各方面都相对胜出一些,这是因为scikit-learn库实现了很多机器学习算法。

加载数据(Data Loading)

我们假设输入时一个特征矩阵或者csv文件。

首先,数据应该被载入内存中。

scikit-learn的实现使用了NumPy中的arrays,所以,我们要使用NumPy来载入csv文件。

以下是从UCI机器学习数据仓库中下载的数据。

import numpy as np

import urllib

# url with dataset

url = "http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"

# download the file

raw_data = urllib.urlopen(url)

# load the CSV file as a numpy matrix

dataset = np.loadtxt(raw_data, delimiter=",")

# separate the data from the target attributes

X = dataset[:,0:7]

y = dataset[:,8]

我们要使用该数据集作为例子,将特征矩阵作为X,目标变量作为y。

数据归一化(Data Normalization)

大多数机器学习算法中的梯度方法对于数据的缩放和尺度都是很敏感的,在开始跑算法之前,我们应该进行归一化或者标准化的过程,这使得特征数据缩放到0-1范围中。scikit-learn提供了归一化的方法:

from sklearn import preprocessing

# normalize the data attributes

normalized_X = preprocessing.normalize(X)

# standardize the data attributes

standardized_X = preprocessing.scale(X)

特征选择(Feature Selection)

在解决一个实际问题的过程中,选择合适的特征或者构建特征的能力特别重要。这成为特征选择或者特征工程。

特征选择时一个很需要创造力的过程,更多的依赖于直觉和专业知识,并且有很多现成的算法来进行特征的选择。

下面的树算法(Tree algorithms)计算特征的信息量:

from sklearn import metrics

from sklearn.ensemble import ExtraTreesClassifier

model = ExtraTreesClassifier()

model.fit(X, y)

# display the relative importance of each attribute

print(model.feature_importances_)

算法的使用

scikit-learn实现了机器学习的大部分基础算法,让我们快速了解一下。

逻辑回归

大多数问题都可以归结为二元分类问题。这个算法的优点是可以给出数据所在类别的概率。

from sklearn import metrics

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()

model.fit(X, y)

print(model)

# make predictions

expected = y

predicted = model.predict(X)

# summarize the fit of the model

print(metrics.classification_report(expected, predicted))

print(metrics.confusion_matrix(expected, predicted))

结果:

LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,

intercept_scaling=1, penalty=l2, random_state=None, tol=0.0001)

precision recall f1-score support

0.0 0.79 0.89 0.84 500

1.0 0.74 0.55 0.63 268

avg / total 0.77 0.77 0.77 768

[[447 53]

[120 148]]

朴素贝叶斯

这也是著名的机器学习算法,该方法的任务是还原训练样本数据的分布密度,其在多类别分类中有很好的效果。

from sklearn import metrics

from sklearn.naive_bayes import GaussianNB

model = GaussianNB()

model.fit(X, y)

print(model)

# make predictions

expected = y

predicted = model.predict(X)

# summarize the fit of the model

print(metrics.classification_report(expected, predicted))

print(metrics.confusion_matrix(expected, predicted))

结果:

GaussianNB()

precision recall f1-score support

0.0 0.80 0.86 0.83 500

1.0 0.69 0.60 0.64 268

avg / total 0.76 0.77 0.76 768

[[429 71]

[108 160]]

k近邻

k近邻算法常常被用作是分类算法一部分,比如可以用它来评估特征,在特征选择上我们可以用到它。

from sklearn import metrics

from sklearn.neighbors import KNeighborsClassifier

# fit a k-nearest neighbor model to the data

model = KNeighborsClassifier()

model.fit(X, y)

print(model)

# make predictions

expected = y

predicted = model.predict(X)

# summarize the fit of the model

print(metrics.classification_report(expected, predicted))

print(metrics.confusion_matrix(expected, predicted))

结果:

KNeighborsClassifier(algorithm=auto, leaf_size=30, metric=minkowski,

n_neighbors=5, p=2, weights=uniform)

precision recall f1-score support

0.0 0.82 0.90 0.86 500

1.0 0.77 0.63 0.69 268

avg / total 0.80 0.80 0.80 768

[[448 52]

[ 98 170]]

决策树

分类与回归树(Classification and Regression Trees ,CART)算法常用于特征含有类别信息的分类或者回归问题,这种方法非常适用于多分类情况。

from sklearn import metrics

from sklearn.tree import DecisionTreeClassifier

# fit a CART model to the data

model = DecisionTreeClassifier()

model.fit(X, y)

print(model)

# make predictions

expected = y

predicted = model.predict(X)

# summarize the fit of the model

print(metrics.classification_report(expected, predicted))

print(metrics.confusion_matrix(expected, predicted))

结果:

DecisionTreeClassifier(compute_importances=None, criterion=gini,

max_depth=None, max_features=None, min_density=None,

min_samples_leaf=1, min_samples_split=2, random_state=None,

splitter=best)

precision recall f1-score support

0.0 1.00 1.00 1.00 500

1.0 1.00 1.00 1.00 268

avg / total 1.00 1.00 1.00 768

[[500 0]

[ 0 268]]

支持向量机

SVM是非常流行的机器学习算法,主要用于分类问题,如同逻辑回归问题,它可以使用一对多的方法进行多类别的分类。

from sklearn import metrics

from sklearn.svm import SVC

# fit a SVM model to the data

model = SVC()

model.fit(X, y)

print(model)

# make predictions

expected = y

predicted = model.predict(X)

# summarize the fit of the model

print(metrics.classification_report(expected, predicted))

print(metrics.confusion_matrix(expected, predicted))

结果:

SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,

kernel=rbf, max_iter=-1, probability=False, random_state=None,

shrinking=True, tol=0.001, verbose=False)

precision recall f1-score support

0.0 1.00 1.00 1.00 500

1.0 1.00 1.00 1.00 268

avg / total 1.00 1.00 1.00 768

[[500 0]

[ 0 268]]

除了分类和回归算法外,scikit-learn提供了更加复杂的算法,比如聚类算法,还实现了算法组合的技术,如Bagging和Boosting算法。

如何优化算法参数

一项更加困难的任务是构建一个有效的方法用于选择正确的参数,我们需要用搜索的方法来确定参数。scikit-learn提供了实现这一目标的函数。

下面的例子是一个进行正则参数选择的程序:

import numpy as np

from sklearn.linear_model import Ridge

from sklearn.grid_search import GridSearchCV

# prepare a range of alpha values to test

alphas = np.array([1,0.1,0.01,0.001,0.0001,0])

# create and fit a ridge regression model, testing each alpha

model = Ridge()

grid = GridSearchCV(estimator=model, param_grid=dict(alpha=alphas))

grid.fit(X, y)

print(grid)

# summarize the results of the grid search

print(grid.best_score_)

print(grid.best_estimator_.alpha)

结果:

GridSearchCV(cv=None,

estimator=Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,

normalize=False, solver=auto, tol=0.001),

estimator__alpha=1.0, estimator__copy_X=True,

estimator__fit_intercept=True, estimator__max_iter=None,

estimator__normalize=False, estimator__solver=auto,

estimator__tol=0.001, fit_params={}, iid=True, loss_func=None,

n_jobs=1,

param_grid={'alpha': array([ 1.00000e+00, 1.00000e-01, 1.00000e-02, 1.00000e-03,

1.00000e-04, 0.00000e+00])},

pre_dispatch=2*n_jobs, refit=True, score_func=None, scoring=None,

verbose=0)

0.282118955686

1.0

有时随机从给定区间中选择参数是很有效的方法,然后根据这些参数来评估算法的效果进而选择最佳的那个。

import numpy as np

from scipy.stats import uniform as sp_rand

from sklearn.linear_model import Ridge

from sklearn.grid_search import RandomizedSearchCV

# prepare a uniform distribution to sample for the alpha parameter

param_grid = {'alpha': sp_rand()}

# create and fit a ridge regression model, testing random alpha values

model = Ridge()

rsearch = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=100)

rsearch.fit(X, y)

print(rsearch)

# summarize the results of the random parameter search

print(rsearch.best_score_)

print(rsearch.best_estimator_.alpha)

结果:

RandomizedSearchCV(cv=None,

estimator=Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,

normalize=False, solver=auto, tol=0.001),

estimator__alpha=1.0, estimator__copy_X=True,

estimator__fit_intercept=True, estimator__max_iter=None,

estimator__normalize=False, estimator__solver=auto,

estimator__tol=0.001, fit_params={}, iid=True, n_iter=100,

n_jobs=1,

param_distributions={'alpha': },

pre_dispatch=2*n_jobs, random_state=None, refit=True,

scoring=None, verbose=0)

0.282118643885

0.988443794636

小结

我们总体了解了使用scikit-learn库的大致流程,希望这些总结能让初学者沉下心来,一步一步尽快的学习如何去解决具体的机器学习问题。

python scikit learn 封装_python的scikit-learn的主要模块和基本使用相关推荐

  1. python modbus类封装_Python 中引入一个文件,模块的概念

    Python 提供了强大的模块支持,主要体现在,不仅 Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块. 通过这些强大的模块可以极大地提高开 ...

  2. python怎样实现封装_Python底层封装实现方法详解

    Python底层封装实现方法详解 这篇文章主要介绍了Python底层封装实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 事实上,pyth ...

  3. python pywinauto 单击鼠标_Python 基础(十):模块与包

    1 简介 1.1 模块 Python 中一个以 .py 结尾的文件就是一个模块,模块中定义了变量.函数等来实现一些类似的功能.Python 有很多自带的模块(标准库)和第三方模块,一个模块可以被其他模 ...

  4. python怎样实现封装_python 封装底层实现原理

    事实上,python封装特性的实现纯属"投机取巧",之所以类对象无法直接调用私有方法和属性,是因为底层实现时,python偷偷改变了它们的名称. python在底层实现时,将它们的 ...

  5. python modbus类封装_Python | 面向对象程序设计来了!

    当当当,技术小E又来了! 经过前几次的基础贴的培训 相信很多同学对python的基础知识 已经有了一个简单的认识 那么下面我们来讲一讲 python面向对象程序设计. 我们在写程序的时候一般有两种方式 ...

  6. python 面向对象的封装_Python面向对象封装操作案例详解

    本文实例讲述了Python面向对象封装操作.分享给大家供大家参考,具体如下: 目标 封装 小明爱跑步 存放家具 01. 封装 封装 是面向对象编程的一大特点 面向对象编程的 第一步 ―― 将 属性 和 ...

  7. python测试自动化封装_python接口自动化学习笔记(封装获取测试数据方法)

    本篇文章是接于python接口自动化学习笔记(封装方法用于读取excel) 后的拓展,讲解在封装完成excel的数据读取代码后,如何在data层进行使用 首先,我准备了这样一个excel表格用以存储测 ...

  8. python小工具封装_python接口自动化(二)——封装需要用到的工具类

    封装需要用的工具类: 1.封装读取Excel的工具类,这里选用的是pandas: importpandas as pd path= 'test.xlsx'sheet_name= 'test_data' ...

  9. python逆转字符串封装_Python 实现文本操作之逆转字符串

    程序要求 今天完成了第一个练习的小项目,逆转字符串--输入一个字符串,将其逆转并输出,制作了可视化的小窗口,在图形化界面下输入和输出. 程序截图: 程序代码: # _*_ coding: UTF-8 ...

最新文章

  1. a.cmd 文件里的内容
  2. 2018 我的学习分享路线
  3. 神经网络到底是如何做出决策的?
  4. 03_4_this关键字
  5. pap chap认证配置
  6. Spark Master的注册机制与状态管理
  7. postman使用过程中body中的form-data,x-www-form-urlencoded,raw,binary的简单记录
  8. 如何在tomcat下应用部署日志_教妹子用IDEA创建web应用,部署到Tomcat服务器
  9. position: relative_设置relative 后再设置定位 原有位置空白
  10. 共享的网络如何让自己比别人快_OPPO K3如何共享网络?
  11. 《认知设计:提升学习体验的艺术》——差距在哪里
  12. [论文笔记]MACHINE COMPREHENSION USING MATCH-LSTM AND ANSWER POINTER
  13. 关于最新版的JCreator只能编译不能运行的问题
  14. (一)Redfish简介
  15. 怎么把图片压缩到30K以下?如何用手机快速压缩图片?
  16. OpenCV4学习笔记(59)——高动态范围(HDR)成像
  17. 通俗的解释docker
  18. 一、【s3c2440移植linux-3.5】移植准备
  19. 【人脸识别】基于PCA和SVM的人脸识别关键技术研究与实现附matlab代码
  20. 登录163邮箱续费情况怎么查询?163vip邮箱怎么收费?

热门文章

  1. java中自造类是什么意思_JAVA问题,什么时候需要,Class类型的?
  2. 徐州技师学院计算机程序设计,徐州技师学院2021年有哪些专业
  3. 湖南工程学院计算机毕业设计,湖南工程学院毕业设计模板.docx
  4. :/index.php,http://localhost/my/INDEX.PHP/INDEX/INDEX无法正常运行:解决时找不到Options FollowSymLinks谢谢...
  5. mysql导出txt到client_mysql导出导入txt以及sftp自动下载(一)
  6. 访问 asp网页 白屏_(02)ASP如何设定主目录和默认文档
  7. delphi 鼠标获取窗口句柄_Windows窗口自定义,只需WindowTop一键设置
  8. 爬虫的步骤解析内容xpath介绍_爬虫入门到精通-网页的解析(xpath)
  9. 有微型计算机广告,广告还会受欢迎?都是斯巴达克显卡惹的“祸”
  10. ubuntu中的fi语法_Shell脚本语法--if/then/elif/else/fi