记录我看黑马三天入门ML的第一天,看完黑马,准备再去啃西瓜书!
先要安装sklearn相关的库,我pycharm配置的是anaconda的环境,所以直接在anaconda中配置了sklearn的库。sklearn包含的算法有:Classification(分类)、Regression(回归)、Clustering(聚类)、Dimensionality redution(降维)、Model selection(模型选择) 、Preprocessing(特征工程)
加载获取小规模数据集,数据包含在datasets中。
sklearn.datasets.load_*();
获得大规模数据集,数据需要从网上下载,函数第一个参数是data_home,表示数据集下载目录,有默认值。
sklearn.datasets.fetch_*(data_home)
例:获取鸢尾花数据集(返回的是字典)
import sklearn
def dataset_demo():
from sklearn import datasets
#获取数据集
iris=sklearn.datasets.load_iris()
print("鸢尾花数据集:\n",iris)
print("查看数据集描述:\n",iris["DESCR"])
return None
dataset_demo()#返回的是字典
读取数据集以后可以详细观看。
load和fetch返回的数据类型是datasets.base.Bunch(字典格式)
(1)data:特征数据数组,是[n_samples*n_features]的二维numpy.ndarray数组
(2)target:标签数组,是n_samples的一维numpy.ndarray数组
(3)DESCR:数据描述
(4)feature_names:特征名
(5)target_names:标签名
训练数据:用于训练,构建模型
测试数据:模型检验,用于评估模型是否有效,占数据集20%~30%
def train_test_split(*arrays,
test_size=None,
train_size=None,
random_state=None,
shuffle=True,
stratify=None):
"""Split arrays or matrices into random train and test subsets子集合
Quick utility that wraps input validation and
``next(ShuffleSplit().split(X, y))`` and application to input data
into a single call for splitting (and optionally subsampling) data in a
oneliner.
Read more in the :ref:`User Guide `.
Parameters
----------
*arrays : sequence of indexables with same length / shape[0]
Allowed inputs are lists, numpy arrays, scipy-sparse
matrices or pandas dataframes.
test_size : float or int, default=None
If float, should be between 0.0 and 1.0 and represent the proportion
of the dataset to include in the test split. If int, represents the
absolute number of test samples. If None, the value is set to the
complement of the train size. If ``train_size`` is also None, it will
be set to 0.25.
train_size : float or int, default=None
If float, should be between 0.0 and 1.0 and represent the
proportion of the dataset to include in the train split. If
int, represents the absolute number of train samples. If None,
the value is automatically set to the complement of the test size.
random_state : int, RandomState instance or None, default=None
Controls the shuffling applied to the data before applying the split.
Pass an int for reproducible output across multiple function calls.
See :term:`Glossary `.
shuffle : bool, default=True
Whether or not to shuffle the data before splitting. If shuffle=False
then stratify must be None.
stratify : array-like, default=None
If not None, data is split in a stratified fashion, using this as
the class labels.
Read more in the :ref:`User Guide `.
Returns
-------
splitting : list, length=2 * len(arrays)
List containing train-test split of inputs.
.. versionadded:: 0.16
If the input is sparse, the output will be a
``scipy.sparse.csr_matrix``. Else, output type is the same as the
input type.
Examples
--------
>>> import numpy as np
>>> from sklearn.model_selection import train_test_split
>>> X, y = np.arange(10).reshape((5, 2)), range(5)
>>> X
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
>>> list(y)
[0, 1, 2, 3, 4]
>>> X_train, X_test, y_train, y_test = train_test_split(
... X, y, test_size=0.33, random_state=42)
...
>>> X_train
array([[4, 5],
[0, 1],
[6, 7]])
>>> y_train
[2, 0, 3]
>>> X_test
array([[2, 3],
[8, 9]])
>>> y_test
[1, 4]
>>> train_test_split(y, shuffle=False)
[[0, 1, 2], [3, 4]]
"""
(1)为什么需要特征工程(Feature Engineering)
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已
(2) 什么是特征工程
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。会直接影响机器学习的效果。
(3)特征工程的位置与数据处理的比较
pandas:一个数据读取非常方便以及基本的处理格式的工具。用于数据清洗、数据处理
sklearn:对特征的处理提供了强大的接口。用于特征工程
特征抽取/特征提取/特征值化,特征预处理,特征降维
(4)特征抽取/特征提取/特征值化
学习目标:
应用DictVectorizer实现对类别特征数值化、离散化
应用CountVectorizer实现对文本特征数值化
应用TfidfVectorizer实现对文本特征数值化
说出两种文本特征提取方式的区别
无应用
(5)为什么要特征提取?什么是特征提取?
用机器学习算法对数据集进行学习,机器学习算法实际上一些统计方法(数学公式),是不能处理字符串、文本、图像的,需要转换为可用于机器学习的数字特征。
(6)特征提取API
sklearn.feature_extraction
The sklearn.feature_extraction module deals with feature extraction from raw data. It currently includes methods to extract features from text and images.
作用:对字典数据进行特征值化
1 API
sklearn.feature_extraction.DictVectorizer(*, dtype=, separator='=', sparse=True, sort=True)
作用:对文本数据进行特征值化
sklearn.feature_extraction.text.CountVectorizer(*, input='content', encoding='utf-8', decode_error='strict', strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, stop_words=None停用词, token_pattern='(?u)\b\w\w+\b', ngram_range=(1, 1), analyzer='word', max_df=1.0, min_df=1, max_features=None, vocabulary=None, binary=False, dtype=)
停用词指的是在特征提取的时候,不提取的词。
关键词:在某一个类别文章中,出现很多,在其他类别文章中,出现很少。
(1)TF-IDF主要思想:如果某个词或短语在一篇文章中出现概率较高,并且在其他文章中很少出现,则认为此词或者是短语具有良好的类别区分能力,适合用来分类。
(2)TF-IDF作用:用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
(3)TD——词频=词语出现次数/总词数
(4)IDF——逆向文档频率=lg(总文件数目/包含该词语文件数目)
例:
1000篇文章——语料库
100篇文章——“非常”
10篇文章——“经济”
两篇文章:
文章A(100词):10次“经济” TF—IDF:0.12=0.2
TF:10/100 =0.1 IDF:lg(1000/10)=2
文章B(100词):10次“非常” TF—IDF:0.11=0.1
TF:10/100 =0.1 IDF:lg(1000/100)=1
故而“经济”对语料库中的文章分类更重要(个人觉得在一篇文章内比较觉得比较好)
sklearn.feature_extraction.text.TfidVectorize(stop_words = None...)
(1)什么是特征预处理?
通过一些转换函数将特征数据转换成更适合算法模型的特征数据过程
(2)包含内容
sklearn.preprocessing
(1)定义
通过对原始数据进行变换把数据映射到(默认为[0,1]之间)
(2)计算
X1 = (x - min)/(max-min)
X2 = X1*(mx - mi)+ mi
=>mx,mi分别为指定区间值,默认mx为1,mi为0
sklearn.preprocessing.MinMaxScaier(feature_range =(0,1)...)
(1)定义
通过对原始数据进行变化,把数据变换到均值为0,标准差为1的范围内。
(2)计算
X1 = (x-mean(均值))/β(标准差)
sklearn.preprocessing.StandardScaler()
(3)适用于对大数据的处理,如果出现异常点,少量异常点对均值与标准差影响不大