Press "Enter" to skip to content

机器学习 – sklean 库

sklean 是机器学习阶段最重要的库, sklean 不仅能提供大量可用数据集,更是实现绝大多数着名的机器学习算法,sklean 的特点就是:装性好,几行代码就能使用,文档完善,容易上手,API 非常丰富

 

获取学习阶段可用数据集

 

机器学习是从统计发展而来的,永远也离不开数据,并且机器学习、深度学习的基础永远都是数据,也是为数据服务的

 

但是数据难得啊,公司级别的数据我们是拿不到的,那些都是要花大钱的,要不就是自己偷摸收集的。那我们在学习阶段从哪里获得数据资料呢,自然有地方:

sklearn – sklearn 官网可以提供少量数据集,地址: scikit-learn.org/stable/data…
kaggle – kaggle 是数据挖掘,他的网站也能提供一些数据集,提一下啊 kaggle 已经是 google 的了,地址: www.kaggle.com/datasets
UCI – UCI 是加州大学,是专业的学术机构,其提供不少专业数据集,地址: archive.ics.uci.edu/ml/index.ph…

这是他们之间的比较:

这里我们选用 sklean,sklean 这个库多好,把数据集和数据处理算法都提供了,业界就是需要像 sklean 这样的库啊,python 的特点就是库多,库的封装行都非常 Nice,几行代码可以完成很复杂的操作

 

安装 sklean

 

很简单,用 pip 安装即可,这里已经创建了独立的 python 环境了

 

pip3 install Scikit-learn

 

pip 的毕竟都是国外地址,所有有的朋友那里会很慢,这里大家可以使用 清华 的pip镜像

 

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple Scikit-learn

 

查看下 sklearn 装没装上,sklearn 需要 scipy、numpy 支持的,一般都会自动装上的,大家也去看看这俩有没有,没有也是用 pip 装一下就好了

 

pip3 list

 

加载 sklean 数据集

 

sklean 下的 datasets 里面提供了大量可用数据集,数据集分2种:

本地数据集 – 数据集不大,直接就集成在了 datasets 包里,使用: datasets.load_*() API 加载
远程数据集 – 数据集非常大,很多数据集都是上G的,这就要求链接远程服务器下载了,使用: datasets.fetch_*(data_home=None) API 加载,参数是数据集下载到本地的地址,下载完成后,以后再用这个数据集就不用再去下载了,算是有个磁盘缓存吧。下载地址可以不写,默认是:根目录下的 /scikit_learn_data/

* 号表示数据集的名字,比如我们要加载鸢尾花 iris 这个数据集,API 是: datasets.load_iris()

 

数据集对象类型

 

我们从 sklean 中加载得到的数据集,他的类型是: Bunch 继承自字典,我看着和 map 差不多,提供2种取值操作:

 

dist[key] = value
dist.key = value

 

前文我们说过,机器学习中的一组数据统称数据集,而数据是由: 特征值+目标值 组成的,那幺代码里我们拿到的数据集对象 Bunch 也应该由相应的属性, Bunch 里面有5个属性:

 

data
targe
DESCR
feature_names
targe_names

 

这是从代码的角度看,但是我们还是没看到 数据集 到底是个什幺样子

 

经典的鸢尾花数据集

 

数据集 是 map + 二维数组,最外层采用 key/value 结构,value内部则是二维数组,每一行都是一个数据,也叫单元,每一列都是一个特征或是目标

 

为了更好的理解数据集,这里我们用鸢尾花这个 sklearn 上最经典的入门例子来看看:

学者们采集了鸢尾花的4种特性,然后把鸢尾花分成了3类。大家体会下,吧事物数据化就是这样的,就是分析你这类事物有什幺明显的特点,抽象采集出来这就是特征了,然后你这类事物可以分种有代表性的类型,这就是目标了

 

导包

 

from sklearn.datasets import load_iris

 

加载代码:

 

from sklearn.datasets import load_iris
// 加载鸢尾花数据集
data = load_iris()
print(type(data))
print(data)

 

数据集本体: – 数据集本身是遵循 JSON 格式的

 

{
'data': array([[5.1, 3.5, 1.4, 0.2],
       [4.9, 3. , 1.4, 0.2],
       [4.7, 3.2, 1.3, 0.2],
       [6.7, 3.3, 5.7, 2.5],
       [6.7, 3. , 5.2, 2.3],
       [6.3, 2.5, 5. , 1.9],
       [6.5, 3. , 5.2, 2. ],
       [6.2, 3.4, 5.4, 2.3],
       [5.9, 3. , 5.1, 1.8]]), 
'target': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]), 
'target_names': array(['setosa', 'versicolor', 'virginica'], dtype='<U10'), 
'DESCR': '.. ,
'feature_names': ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'], 
'filename': '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/datasets/data/iris.csv'}

 

DESCR 描述里面其实有很多信息的,比如采集哪些特征,目标值分几类,里面的列表还统计出每个特征的最大值,最小值,平均值,标准差,相关系数,最后 References 里面还有相关参考,看着有点像短篇论文啦…

 

.. _iris_dataset:
Iris plants dataset
--------------------
**Data Set Characteristics:**
    :Number of Instances: 150 (50 in each of three classes)
    :Number of Attributes: 4 numeric, predictive attributes and the class
    :Attribute Information:
        - sepal length in cm
        - sepal width in cm
        - petal length in cm
        - petal width in cm
        - class:
                - Iris-Setosa
                - Iris-Versicolour
                - Iris-Virginica
                
    :Summary Statistics:
    ============== ==== ==== ======= ===== ====================
                    Min  Max   Mean    SD   Class Correlation
    ============== ==== ==== ======= ===== ====================
    sepal length:   4.3  7.9   5.84   0.83    0.7826
    sepal width:    2.0  4.4   3.05   0.43   -0.4194
    petal length:   1.0  6.9   3.76   1.76    0.9490  (high!)
    petal width:    0.1  2.5   1.20   0.76    0.9565  (high!)
    ============== ==== ==== ======= ===== ====================
    :Missing Attribute Values: None
    :Class Distribution: 33.3% for each of 3 classes.
    :Creator: R.A. Fisher
    :Donor: Michael Marshall (MARSHALL%[email protected])
    :Date: July, 1988
The famous Iris database, first used by Sir R.A. Fisher. The dataset is taken
from Fisher's paper. Note that it's the same as in R, but not as in the UCI
Machine Learning Repository, which has two wrong data points.
This is perhaps the best known database to be found in the
pattern recognition literature.  Fisher's paper is a classic in the field and
is referenced frequently to this day.  (See Duda & Hart, for example.)  The
data set contains 3 classes of 50 instances each, where each class refers to a
type of iris plant.  One class is linearly separable from the other 2; the
latter are NOT linearly separable from each other.
.. topic:: References
   - Fisher, R.A. "The use of multiple measurements in taxonomic problems"
     Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions to
     Mathematical Statistics" (John Wiley, NY, 1950).
   - Duda, R.O., & Hart, P.E. (1973) Pattern Classification and Scene Analysis.
     (Q327.D83) John Wiley & Sons.  ISBN 0-471-22361-1.  See page 218.
   - Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System
     Structure and Classification Rule for Recognition in Partially Exposed
     Environments".  IEEE Transactions on Pattern Analysis and Machine
     Intelligence, Vol. PAMI-2, No. 1, 67-71.
   - Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule".  IEEE Transactions
     on Information Theory, May 1972, 431-433.
   - See also: 1988 MLC Proceedings, 54-64.  Cheeseman et al"s AUTOCLASS II
     conceptual clustering system finds 3 classes in the data.
   - Many, many more ...

 

.shape 我们还可以看数据,比如 data 由几行几列

 

print(data.data.shape)
(150, 4)

 

数据划分

 

数据划分 – 我们从 sklearn 上拿到的数据是为了做练习的,练习包括了训练模型和测试,这样我们就必须把拿到的数据做下划分才能在训练模型之后还能做下测试,检验模型做的好不好

 

一般我们都是遵循这个比例去划分训练和测试的数据比例的:

 

训练集:
测试集:

 

API 在 sklearn.model_selection 包下面

 

// 导包
from sklearn.model_selection import train_test_split
train_test_split(x,y,test_size,random_state)

 

train_test_split 方法有4个参数,xy是必传,其他可以不写

 

x
y
test_size
random_state

 

train_test_split 方法返回4个参数,一般我幺你这样命名:

 

x_train
x_test
y_train
y_test

 

训练集和测试集一般我们使用这2个单词:

 

train
test

 

然后我们跑一下:

 

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
data = load_iris()
x_train,x_test,y_train,y_test  = train_test_split(data.data,data.target,test_size = 0.2)
print("训练集特征值:\n",x_train,x_train.shape)

 

取部分数据,要不太多了,可以看到训练集数据是 120 个

 

训练集特征值:
 [[5.  3.  1.6 0.2]
 [5.2 3.5 1.5 0.2]
 [5.1 3.8 1.6 0.2]
 [7.1 3.  5.9 2.1]
 [5.9 3.  4.2 1.5]
 [6.8 2.8 4.8 1.4]
 [6.7 3.3 5.7 2.1]
 [5.6 2.5 3.9 1.1]
 [6.  2.2 5.  1.5]
 [6.3 3.4 5.6 2.4]
 [4.8 3.  1.4 0.1]] (120, 4)

 

最后

 

sklearn 是机器学习阶段最最最重要的库,在给我们提供了学习用数据的同时,也提供了大量的机器学习 API,包括大多数知名算法。本文这里只是给大家科普一下 sklearn 这个库,写的很啰嗦,后面特征工程那里就会使用到 sklearn 里面的算法了,大家拭目以待吧~

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注