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

加载数据(Data Loading)

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

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

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

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

样例:

1 import numpy as np

2 import urllib

3 # url with dataset

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

5 # download the file

6 raw_data = urllib.urlopen(url)

7 # load the CSV file as a numpy matrix

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

9 # separate the data from the target attributes

10 X = dataset[:,0:7]

11 y = dataset[:,8]

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

注意事项:

(1)可以用浏览器打开那个url,把数据文件保存在本地,然后直接用 np.loadtxt(‘data.txt’, delemiter=”,”) 就可以加载数据了;

(2)X = dataset[:, 0:7]的意思是:把dataset中的所有行,所有1-7列的数据都保存在X中;

数据归一化(Data Normalization)

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

样例:

1 from sklearn import preprocessing

2 #scale the data attributes

3 scaled_X = preprocessing.scale(X)

4

5 # normalize the data attributes

6 normalized_X = preprocessing.normalize(X)

7

8 # standardize the data attributes

9 standardized_X = preprocessing.scale(X)

特征选择(Feature Selection)

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

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

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

样例:

1 from sklearn import metrics

2 from sklearn.ensemble import ExtraTreesClassifier

3 model = ExtraTreesClassifier()

4 model.fit(X, y)

5 # display the relative importance of each attribute

6 print(model.feature_importances_)

输出每个特征的重要程度:

[ 0.13784722 0.15383598 0.25451389 0.17476852 0.02847222 0.12314815 0.12741402]

算法的使用

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

逻辑回归(官方文档)

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

样例:

1 from sklearn import metrics

2 from sklearn.linear_model import LogisticRegression

3 model = LogisticRegression()

4 model.fit(X, y)

5 print('MODEL')

6 print(model)

7 # make predictions

8 expected = y

9 predicted = model.predict(X)

10 # summarize the fit of the model

11 print('RESULT')

12 print(metrics.classification_report(expected, predicted))

13 print('CONFUSION MATRIX')

14 print(metrics.confusion_matrix(expected, predicted))

结果:

1 MODEL

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

3 intercept_scaling=1, max_iter=100, multi_class='ovr',

4 penalty='l2', random_state=None, solver='liblinear', tol=0.0001,

5 verbose=0)

6 RESULT

7 precision recall f1-score support

8

9 0.0 1.00 1.00 1.00 4

10 1.0 1.00 1.00 1.00 6

11

12 avg / total 1.00 1.00 1.00 10

13

14 CONFUSION MATRIX

15 [[4 0]

16 [0 6]]

输出结果中的各个参数信息,可以参考官方文档。

朴素贝叶斯(官方文档)

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

样例:

1 from sklearn import metrics

2 from sklearn.naive_bayes import GaussianNB

3 model = GaussianNB()

4 model.fit(X, y)

5 print('MODEL')

6 print(model)

7 # make predictions

8 expected = y

9 predicted = model.predict(X)

10 # summarize the fit of the model

11 print('RESULT')

12 print(metrics.classification_report(expected, predicted))

13 print('CONFUSION MATRIX')

14 print(metrics.confusion_matrix(expected, predicted))

结果:

MODEL

GaussianNB()

RESULT

precision recall f1-score support

0.0 0.80 1.00 0.89 4

1.0 1.00 0.83 0.91 6

avg / total 0.92 0.90 0.90 10

CONFUSION MATRIX

[[4 0]

[1 5]]

k近邻(官方文档)

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

样例:

1 from sklearn import metrics

2 from sklearn.neighbors import KNeighborsClassifier

3 # fit a k-nearest neighbor model to the data

4 model = KNeighborsClassifier()

5 model.fit(X, y)

6 print(model)

7 # make predictions

8 expected = y

9 predicted = model.predict(X)

10 # summarize the fit of the model

11 print(metrics.classification_report(expected, predicted))

12 print(metrics.confusion_matrix(expected, predicted))

结果:

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

metric_params=None, n_neighbors=5, p=2, weights='uniform')

precision recall f1-score support

0.0 0.75 0.75 0.75 4

1.0 0.83 0.83 0.83 6

avg / total 0.80 0.80 0.80 10

[[3 1]

[1 5]]

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

样例:

1 from sklearn import metrics

2 from sklearn.tree import DecisionTreeClassifier

3 # fit a CART model to the data

4 model = DecisionTreeClassifier()

5 model.fit(X, y)

6 print(model)

7 # make predictions

8 expected = y

9 predicted = model.predict(X)

10 # summarize the fit of the model

11 print(metrics.classification_report(expected, predicted))

12 print(metrics.confusion_matrix(expected, predicted))

样例:

DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,

max_features=None, max_leaf_nodes=None, min_samples_leaf=1,

min_samples_split=2, min_weight_fraction_leaf=0.0,

random_state=None, splitter='best')

precision recall f1-score support

0.0 1.00 1.00 1.00 4

1.0 1.00 1.00 1.00 6

avg / total 1.00 1.00 1.00 10

[[4 0]

[0 6]]

支持向量机(官方文档)

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

样例:

1 from sklearn import metrics

2 from sklearn.svm import SVC

3 # fit a SVM model to the data

4 model = SVC()

5 model.fit(X, y)

6 print(model)

7 # make predictions

8 expected = y

9 predicted = model.predict(X)

10 # summarize the fit of the model

11 print(metrics.classification_report(expected, predicted))

12 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 4

1.0 1.00 1.00 1.00 6

avg / total 1.00 1.00 1.00 10

[[4 0]

[0 6]]

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

如何优化算法参数

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

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

GridSearchCV官方文档1(模块使用) 官方文档2(原理详解)

样例:

1 import numpy as np

2 from sklearn.linear_model import Ridge

3 from sklearn.grid_search import GridSearchCV

4 # prepare a range of alpha values to test

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

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

7 model = Ridge()

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

9 grid.fit(X, y)

10 print(grid)

11 # summarize the results of the grid search

12 print(grid.best_score_)

13 print(grid.best_estimator_.alpha)

结果:

GridSearchCV(cv=None, error_score='raise',

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

normalize=False, solver='auto', 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)

-5.59572064238

0.0

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

1 import numpy as np

2 from scipy.stats import uniform as sp_rand

3 from sklearn.linear_model import Ridge

4 from sklearn.grid_search import RandomizedSearchCV

5 # prepare a uniform distribution to sample for the alpha parameter

6 param_grid = {'alpha': sp_rand()}

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

8 model = Ridge()

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

10 rsearch.fit(X, y)

11 print(rsearch)

12 # summarize the results of the random parameter search

13 print(rsearch.best_score_)

14 print(rsearch.best_estimator_.alpha)

python中如何导入sklearn_Python中常用包——sklearn主要模块和基本使用方法相关推荐

  1. mysql rrd_将RRD数据库中数据导入MYSQL中

    一.RRD数据库及RRDTOOL简介 意为Round Robin Database.设计理念为按照round-robin的方式进行存储,在一个周期之后(可自己定义),新的数据会覆盖掉原来的数据.所以R ...

  2. java中poi导入excel_java中使用poi实现导入Excel

    1.java中使用poi实现导入Excel public class XlsDto { /** * 选课号 */ private Integer xkh; /** * 学号 */ private St ...

  3. mathtype中公式导入matlab中,如何将MathType公式保存到Word中

    在文档中编辑公式是一件很麻烦的事情,因为数学公式编辑起来很麻烦,里面涉及到很多的符号,而这些符号都不是直接在文档中就能编辑出来的,因此要想要Word文档中编辑出数学公式,就一定要借助MathType公 ...

  4. python tkinter listbox_Python3 tkinter基础 Listbox for+insert 将list中元素导入listbox中

    Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda : 4.5.11 typesetting : Markdown ...

  5. matlab的且数组专职,如何将excel中数据导入matlab并存入数组中/matlab导入数据并绘图...

    怎样将matlab中的数据导入到excel中 1.首先打开matlab,新建窗口. 2.接着在matlab中生成,并且到excel文件中,具体代码如下图所示. 3.下面来看一下生成的myExample ...

  6. python 导入上级/隔壁目录包的方法

    结论:需要在文件前面加上: import os, syssys.path.append(os.getcwd())或者添加你想导入的包所在的文件夹路径例如:import os, syssys.path. ...

  7. Julia常用包简介

    第三方开发的Julia库(包),是Julia生态中极为重要的一部分.Julia包虽然目前没有Python那样丰富,但却极为快速地发展着.官方提供了包数量的统计趋势,见下图所示: 图D-1 Julia包 ...

  8. R语言处理缺失数据的5个常用包

    R语言处理缺失数据的5个常用包 1.常用缺失数据处理包 2. MICE 包 2.1基本介绍 2.2 实例展示 3.Amelia包 3.1基本介绍 3.2实例展示 4.missForest包 4.1基本 ...

  9. 简述python中怎样导入模块_12 python中模块和包如何导入

    1 模块的三种类型 python标准库 python自带的标准库,比如常用的有os,sys,re,logging等 第三方模块 需要安装第三方模块以后才能导入,比如django 应用程序自定义模块 2 ...

最新文章

  1. freemarker自定义标签(二十一)
  2. Pytorch用tensorboarX查看损失图打不开
  3. Meterpreter
  4. KlayGE 4.0中Deferred Rendering的改进(五)完结篇:Post process
  5. 推流工具_【软件分享】小熊录屏VIP版(手机直播游戏必备推流工具)
  6. python中argsort_numpy的argsort函数
  7. 第二:Pytest执行用例规则和Pycharm运行的三种姿态
  8. 每日算法系列【LeetCode 319】灯泡开关
  9. adb手机无法识别 vivo_vivo安卓adb工具
  10. 大专计算机办公应用,计算机办公软件应用论文
  11. 金士顿16G优盘变8M恢复教程
  12. 【iOS】解决UITextField输入限制受中文自动联想影响的问题
  13. java线程锁有哪几种_Java锁有哪些种类,以及区别
  14. python桌面应用_用Python写个Metro风格的桌面程序
  15. 2022年腾讯课堂现在用m3u8下载不了,怎么办
  16. VUE 的updated钩子函数被死循环一样无限调用
  17. PXE+pxelinux+binlsrv+tftpd32远程安装windows 2003及心得
  18. Siebel Adapter在WMB上的应用
  19. 揭秘Google排名的60个因素
  20. Epic games 一直卡在 在我们启动更新时请稍后的解决方法

热门文章

  1. java list 命名空间,Spring JAVA 不同类加载器命名空间的理解
  2. 当云原生遇上低代码,云端开发so easy!
  3. “通用大模型”趋势下,AI未来当如何?
  4. 云原生数据编排厂商Alluxio获5000万美元C轮融资
  5. 1秒替换视频背景,阿里AI获CVPR 2020四项世界冠军
  6. 听音乐不过瘾?自制一个音乐播放器!| 原力计划
  7. 图解:Kafka 水印备份机制
  8. 如何一站式打造 AIoT 人才?
  9. 告别枯燥,这本插画式 Python 书难怪销量 70W+
  10. 揭秘苹果“地下黑工厂”:临时工薪资无保障,男厕所门口排长龙