文章目录

  • 1.机器学习概述
    • 1.1什么是机器学习
    • 1.2机器学习算法分类
    • 1.3机器学习开发流程
    • 1.4机器学习框架
    • 1.5数据集获取
      • 1.5.1获取sklearn自带数据集的方法
    • 1.6数据集划分
  • 2.数据处理
    • 2.1缺失值处理
    • 2.2数据离散化处理
    • 2.3数据表合并
    • 2.4交叉表和透视表(pivot table)
    • 2.5数据的分组与聚合
  • 3.特征工程
    • 3.1特征工程步骤:
      • 3.1.1特征提取
      • 3.1.2特征预处理
        • 3.1.2.1归一化
        • 3.1.2.2标准化(常用这种方式无量纲化)
      • 3.1.3特征降维
        • 3.1.3.1特征选择
        • 3.1.3.2主成分分析(Principal component analysis)
          • 3.1.2.2.1PCA降维案例
  • 4.机器学习算法训练
    • 4.1详解转换器类和预估器类
    • 4.2模型选择与调优

1.机器学习概述

1.1什么是机器学习

  • 机器学习与人解决问题过程比较


即机器学习的过程为:分析数据 --> 得出模型 --> 利用模型分析新数据

  • 数据集:数据集是有特征值和目标值(也称为标签,可以没有)构成的.如下图,房子面积,位置等都是特征值。

1.2机器学习算法分类

  • 有监督学习(有目标值):分类(目标值是类别) 回归(目标值时连续值)
     1. 分类算法:k-近邻算法,贝叶斯算法,决策树与随机森林,逻辑回归
     2. 回归算法:线性回归,岭回归
  • 无监督学习(没有目标值):聚类
     3.聚类算法:K-means

1.3机器学习开发流程

  1. 获取数据
  2. 数据处理
  3. 特征工程
  4. 机器学习算法训练出模型
  5. 模型评估
  6. 使用模型
    主要是做2,3两个步骤

1.4机器学习框架

scikit learn
tensorflow
pytorch

1.5数据集获取

  1. scikit learn自带数据集: https://scikit-learn.org/stable/datasets
  2. UCI数据集:https://archive.ics.uci.edu/ml/index.php
  3. Kaggle: https://www.kaggle.com/datasets

1.5.1获取sklearn自带数据集的方法

  1. 导入模块datasets
  2. 使用load_*()函数导入数据集,*是要导入数据集的名称
  3. 使用fetch_*(data_home=None)函数将数据集下载到data_home指定路径下
  4. 返回的数据类型为Bunch类型,该类型继承字典,有以下键
from sklearn.datasets import load_iris
# 导入莺尾花数据集
iris=load_iris()
print('数据描述\n',iris['DESCR'])
特征数组.. _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.7826sepal width:    2.0  4.4   3.05   0.43   -0.4194petal 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%PLU@io.arc.nasa.gov):Date: July, 1988The 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 toMathematical 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 SystemStructure and Classification Rule for Recognition in Partially ExposedEnvironments".  IEEE Transactions on Pattern Analysis and MachineIntelligence, Vol. PAMI-2, No. 1, 67-71.- Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule".  IEEE Transactionson Information Theory, May 1972, 431-433.- See also: 1988 MLC Proceedings, 54-64.  Cheeseman et al"s AUTOCLASS IIconceptual clustering system finds 3 classes in the data.- Many, many more ...

1.6数据集划分

1.数据集一部分用于训练模型,一部分用于测试模型评估。所以需要对数据集划分。
2.测试集一般在20%到30%之间。
3.sklearn包提供model_selection模块的train_test_split()函数用于训练和测试数据分割。

测试集大小默认0.25即占比25%.
随机数种子可用于控制变量比较不同的算法.

from sklearn.model_selection import train_test_split
train_data,test_data,train_target,test_target=train_test_split(iris['data'],iris['target'],test_size=0.2)
print('训练特征值\n',train_data[:5,:])
print('测试目标值\n',test_target)
训练特征值[[5.8 2.7 5.1 1.9][6.9 3.1 4.9 1.5][7.7 3.8 6.7 2.2][6.4 3.2 4.5 1.5][5.1 3.3 1.7 0.5]]
测试目标值[2 2 0 2 2 2 0 0 0 1 1 1 0 0 2 2 0 0 2 0 2 2 1 2 1 2 2 2 1 2]

2.数据处理

2.1缺失值处理

  • 流程比较固定,可以考虑写个函数完成
  • 相关处理细节列举

2.2数据离散化处理

  • 目的: 数据离散化技术可以用来减少连续属性的个数,简化数据结构
  • 连续属性离散化的方法:将连续属性的值域划分为若干个离散区间,用不同符号或整数值表示落在不同离散区间的属性。
  • 处理工具:(1)p_cut(2)values.count(3)get_dummies dummies在在这里指的是哑变量

2.3数据表合并

  • merge
  • concat

2.4交叉表和透视表(pivot table)

  • 工具

2.5数据的分组与聚合

  • 什么是分组与聚合,看下面一个例子
  • 工具:分组——groupby,聚合——相关聚合函数
    示例:
import pandas as pd
df=pd.DataFrame({'age':[1,2,3,1,2,3],'weight':[23,21,1,5,4,34],'height':list(range(6))})
# 按年龄分组对体重用mean函数聚合
df.groupby(by='age')['weight'].mean()
# 这行代码与上面结果相同
df['weight'].groupby(by=df['age']).mean()

3.特征工程

  • 为什么需要做特征工程?
    因为数据和特征决定了机器学习的上限,模型和算法只是去逼近这个上限。
  • 特征工程用sklearn做,pandas主要是去做数据清洗和处理的。

3.1特征工程步骤:

3.1.1特征提取

特征提取(就是特征值化):用sklearn的feature_extraction模块来做
  1.字典特征提取 (实际就是将类别处理为one-hot编码)
  one hot编码是将类别变量转换为机器学习算法易于利用的一种形式的过程,使得不同类别间无优先级差异

  sparse matrix干了什么?就是只把非零值按位置表示出来,从而达到节省内存提高加载效率的作用。可以通过参数sparse=Flase设置不返回稀疏矩阵也可以得到sparse matrix后用toarray方法将稀疏矩阵转换为一般的矩阵。
  应用场景:(1)数据集中有类别变量,那么久将数据集转字典或字典迭代器类型再用DictVectorizer做转换 (2)数据集本身就是字典

from sklearn import feature_extraction
data=[{'city':'mianyang','num':100},{'city':'shanghai','num':200},{'city':'dalian','num':300}]
# 实例化转换器类
transfer=feature_extraction.DictVectorizer(sparse=False)
# 调用fit_transform方法对字典迭代器进行特征值化
new_data=transfer.fit_transform(data)
print('特征值:\n',new_data)
# 注get_feature_names()方法将在未来版本被移除,请使用get_feature_names_out()方法
print('特征值名称:\n',transfer.get_feature_names_out())
特征值:[[  0.   1.   0. 100.][  0.   0.   1. 200.][  1.   0.   0. 300.]]
特征值名称:['city=dalian' 'city=mianyang' 'city=shanghai' 'num']

  2.文本特征提取:用子模块text来做
     (1).用CountVectorizer类:统计特征出现次数来特征值化文本

    :由于中文之间不像英语一样单词之间有空格分割,所有中文文本特征化前要先做单词分割,可以考虑用jieba库实现:https://zhuanlan.zhihu.com/p/109110105
    注:哪些词可以停用可以参考停用词表

from sklearn.feature_extraction import text
data=['i love china too','he loves china too ha ha ']
# 实例化转换器类
transfer=text.CountVectorizer() # 这个实例化方法没提供sparse参数
# 调用fit_transform方法进行转换
new_data=transfer.fit_transform(data)
print('特征值:\n',new_data.toarray())
print('特征名称:\n',transfer.get_feature_names_out())
特征值:[[1 0 0 1 0 1][1 2 1 0 1 1]]
特征名称:['china' 'ha' 'he' 'love' 'loves' 'too']
import jieba
def words_cut(text):# jieba.cut(text)返回一个生成器,用list转生成器对象为list后才能转为字符串# 注意列表单词间以空格分割return ' '.join(list(jieba.cut(text)))
data=['我爱中国,中国是一个美丽的国家','我来自四川,四川有大熊猫,他们很可爱']
# 中文单词分割
new_data=[words_cut(text) for text in data]
print(new_data)
['我 爱 中国 , 中国 是 一个 美丽 的 国家', '我 来自 四川 , 四川 有 大熊猫 , 他们 很 可爱']
# 实例化转换器对象
transfer=text.CountVectorizer()
# 调用fit_transform方法转换
final_data=transfer.fit_transform(new_data)
print('特征值:\n',final_data.toarray())
print('特征名称:\n',transfer.get_feature_names_out())
特征值:[[1 2 0 0 0 1 0 0 1][0 0 1 1 2 0 1 1 0]]
特征名称:['一个' '中国' '他们' '可爱' '四川' '国家' '大熊猫' '来自' '美丽']

    (2).用TfidfVectorizer做:用单词重要性程度特征值化

  • TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率)是一种统计方法,用以评估一个词语对于一个文件集或一个语料库中的一份文件的重要程度,其原理可概括为:一个词语在一篇文章中出现次数越多,同时在所有文档中出现次数越少,越能够代表该文章。分类机器学习前常用这种特征提取处理文本。
    tfidf计算公式:tfidf=tf∗idftfidf=tf*idftfidf=tfidf tf=这个单词在本字符串出现频率tf=这个单词在本字符串出现频率tf=这个单词在本字符串出现频率 idf=lg语料库文档量包含该单词的文档数目idf=lg\frac{语料库文档量}{包含该单词的文档数目}idf=lg包含该单词的文档数目语料库文档量
# 实例化转换器对象
transfer=text.TfidfVectorizer()
# 调用fit_transform方法转换
final_data=transfer.fit_transform(new_data)
print('特征值:\n',final_data.toarray())
print('特征名称:\n',transfer.get_feature_names_out())
# 第一个字符串的的‘一个’这个单词的tfidf计算
# tf=1/10=0.1  idf=lg 2/1  tfidf=0.1*
特征值:[[0.37796447 0.75592895 0.         0.         0.         0.377964470.         0.         0.37796447][0.         0.         0.35355339 0.35355339 0.70710678 0.0.35355339 0.35355339 0.        ]]
特征名称:['一个' '中国' '他们' '可爱' '四川' '国家' '大熊猫' '来自' '美丽']

3.1.2特征预处理

  • 特征预处理是通过一些转换函数将特征值转换为更加适合机器学习算法的特征数据的过程
  • 特征预处理的目的:做无量纲化处理(归一化/标准化)使得不同规模数据转为同规模消除数据单位的影响。避免学习过程中由于单位差异导致数值差异过大而忽略某些特征
  • 特征预处理用preprocessing模块做

3.1.2.1归一化

  • 最大最小值归一化X′=X−min(X)max(X)−min(X)×(max(X)−min(X))+min(X)X'=\frac{X-min(X)}{max(X)-min(X)}\times (max(X)-min(X))+min(X)X=max(X)min(X)Xmin(X)×(max(X)min(X))+min(X)
    preprocessing模块提供了完成这一操作的函数

归一化实现无量纲的缺点:依赖最大最小值,如果存在异常值恰好是最大/最小值那么对归一化结果影响很大。鲁棒性差所以只适用于精确的小数据场景

import sklearn.preprocessing
# scaler是放缩器的意思
# 实例化转换器类
transfer=sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)) # 归一化到0,1区间
prepro_data=transfer.fit_transform(final_data.toarray())
print('归一化后的特征值:\n',prepro_data)
归一化后的特征值:[[1. 1. 0. 0. 0. 1. 0. 0. 1.][0. 0. 1. 1. 1. 0. 1. 1. 0.]]

3.1.2.2标准化(常用这种方式无量纲化)

  • z-score标准化X′=X−meanstdX'=\frac{X-mean}{std}X=stdXmean
    部分异常值对mean和std的影响不大,因而采用z-score标准化的方式实现无量纲化可以减弱异常值的影响
    preprocessing模块提供了完成这一操作的函数
import sklearn.preprocessing
# scaler是放缩器的意思
# 实例化转换器类
transfer=sklearn.preprocessing.StandardScaler() # 归一化到0,1区间
prepro_data=transfer.fit_transform(final_data.toarray())
print('标准化后的特征值:\n',prepro_data)
标准化后的特征值:[[ 1.  1. -1. -1. -1.  1. -1. -1.  1.][-1. -1.  1.  1.  1. -1.  1.  1. -1.]]

3.1.3特征降维

  • 降维对象:特征降维是降低的特征的个数而不是数组的维度。得到一组不相关的主变量的过程。
  • 降维方法:(1)特征选择(2)主成分分析

3.1.3.1特征选择

 1.filter过滤式
  (1)方差选择法:方差小的特征过滤掉

  • sklearn提供feature_selection模块做过滤式特征选择

注: threshold /ˈθreʃhəʊld/ n.阈值
  (2)相关系数法:相关系数大的特征过滤其一 或 按一定权重加权得到新特征删除原来两个特征 或 主成分分析

  • pearson相关系数

|r|越接近1两个变量相关性越强,r越接近0相关性越弱。

  • pearson相关系数可以用scipy.stats模块做

 2.embedded嵌入式
  决策树
  正则化
  深度学习:卷积等

import sklearn.feature_selection
from sklearn.datasets import load_diabetes
# 实例化转换器类用方差选择法降维
transfer=sklearn.feature_selection.VarianceThreshold()
# 调用fit_transform方法
new_data=transfer.fit_transform(data)
print(new_data)
[[ 0.03807591  0.05068012  0.06169621 ... -0.00259226  0.01990842-0.01764613][-0.00188202 -0.04464164 -0.05147406 ... -0.03949338 -0.06832974-0.09220405][ 0.08529891  0.05068012  0.04445121 ... -0.00259226  0.00286377-0.02593034]...[ 0.04170844  0.05068012 -0.01590626 ... -0.01107952 -0.046879480.01549073][-0.04547248 -0.04464164  0.03906215 ...  0.02655962  0.04452837-0.02593034][-0.04547248 -0.04464164 -0.0730303  ... -0.03949338 -0.004219860.00306441]]

3.1.3.2主成分分析(Principal component analysis)

  • 详解PCA:https://zhuanlan.zhihu.com/p/37777074

  • 简述PCA降维:PCA是高维数据转低维数据的过程(还是减少特征的过程),这个过程中可能会舍弃原有特征创建新特征。它的作用是将数据维数进行压缩,在损失少量信息的情况下尽可能降低原来数据的复杂度。如图所示将5个样本两个特征的数据集用散点图绘制,可以将点投射到(合适的一条直线上)蓝色直线上,删除原来的两个特征创建一个新的特征达到降维效果。

  • sklearn提供deposition模块的PCA类可用于PCA降维

import sklearn.decomposition
import numpy as np
data=np.array([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
# 实例化转换器类
transfer=sklearn.decomposition.PCA(n_components=0.95)
# 调用fit_transform进行转换
new_data=transfer.fit_transform(data)
print('PCA decompositon后的特征值:\n',new_data)
# 原来有4个特征PCA降维后只有两个特征,样本量不变
PCA decompositon后的特征值:[[-3.13587302e-16  3.82970843e+00][-5.74456265e+00 -1.91485422e+00][ 5.74456265e+00 -1.91485422e+00]]

3.1.2.2.1PCA降维案例

题目:将user_id和aisle放到同一张表(如第二张图所示结构)并使用PCA降维
参考:

  • 表合并:https://pandas.pydata.org/docs/reference/api/pandas.merge.html?highlight=merge#pandas.merge
  • 表交叉:https://pandas.pydata.org/docs/reference/api/pandas.crosstab.html?highlight=crosstab#pandas.crosstab
# 用pandas来读文件,以及合并操作
import pandas as pd
orders=pd.read_csv(r"D:\资料\machine_learning\数据集\instacart-market-basket-analysis\orders.csv\orders.csv")
orders.head(n=3)
order_id user_id eval_set order_number order_dow order_hour_of_day days_since_prior_order
0 2539329 1 prior 1 2 8 NaN
1 2398795 1 prior 2 3 7 15.0
2 473747 1 prior 3 3 12 21.0
products=pd.read_csv(r"D:\资料\machine_learning\数据集\instacart-market-basket-analysis\products.csv\products.csv")
products.head(n=3)
product_id product_name aisle_id department_id
0 1 Chocolate Sandwich Cookies 61 19
1 2 All-Seasons Salt 104 13
2 3 Robust Golden Unsweetened Oolong Tea 94 7
order_products=pd.read_csv(r"D:\资料\machine_learning\数据集\instacart-market-basket-analysis\order_products__prior.csv\order_products__prior.csv")
order_products.head(n=3)
order_id product_id add_to_cart_order reordered
0 2 33120 1 1
1 2 28985 2 1
2 2 9327 3 0
aisles=pd.read_csv(r"D:\资料\machine_learning\数据集\instacart-market-basket-analysis\aisles.csv\aisles.csv")
aisles.head(n=3)
aisle_id aisle
0 1 prepared soups salads
1 2 specialty cheeses
2 3 energy granola bars
tabel1=pd.merge(aisles,products,on=['aisle_id'])
tabel1.head(20)
aisle_id aisle product_id product_name department_id
0 1 prepared soups salads 209 Italian Pasta Salad 20
1 1 prepared soups salads 554 Turkey Chili 20
2 1 prepared soups salads 886 Whole Grain Salad with Roasted Pecans & Mango ... 20
3 1 prepared soups salads 1600 Mediterranean Orzo Salad 20
4 1 prepared soups salads 2539 Original Potato Salad 20
5 1 prepared soups salads 2941 Broccoli Salad 20
6 1 prepared soups salads 3991 Moms Macaroni Salad 20
7 1 prepared soups salads 4112 Chopped Salad Bowl Italian Salad with Salami &... 20
8 1 prepared soups salads 4369 American Potato Salad 20
9 1 prepared soups salads 4977 Mushroom Barley Soup 20
10 1 prepared soups salads 5351 Smoked Whitefish Salad 20
11 1 prepared soups salads 5653 Chicken Curry Salad 20
12 1 prepared soups salads 6778 Soup, Golden Quinoa and Kale 20
13 1 prepared soups salads 8121 Split Pea Soup 20
14 1 prepared soups salads 8382 Organic Tomato Bisque 20
15 1 prepared soups salads 8946 Organic Spinach Pow Salad 20
16 1 prepared soups salads 9431 San Francisco Potato Salad 20
17 1 prepared soups salads 10059 Quinoa Salad Pistachio Citrus 20
18 1 prepared soups salads 10288 Broccoli with Almond Soup 20
19 1 prepared soups salads 10617 Butternut Squash Cumin Soup 20
tabel2=pd.merge(tabel1,order_products,on='product_id')
tabel2.head(n=20)
aisle_id aisle product_id product_name department_id order_id add_to_cart_order reordered
0 1 prepared soups salads 209 Italian Pasta Salad 20 94246 5 0
1 1 prepared soups salads 209 Italian Pasta Salad 20 192465 2 1
2 1 prepared soups salads 209 Italian Pasta Salad 20 195206 18 1
3 1 prepared soups salads 209 Italian Pasta Salad 20 227717 1 1
4 1 prepared soups salads 209 Italian Pasta Salad 20 260072 13 0
5 1 prepared soups salads 209 Italian Pasta Salad 20 289399 4 1
6 1 prepared soups salads 209 Italian Pasta Salad 20 340960 7 1
7 1 prepared soups salads 209 Italian Pasta Salad 20 344099 10 0
8 1 prepared soups salads 209 Italian Pasta Salad 20 379434 7 0
9 1 prepared soups salads 209 Italian Pasta Salad 20 472683 4 0
10 1 prepared soups salads 209 Italian Pasta Salad 20 473054 5 1
11 1 prepared soups salads 209 Italian Pasta Salad 20 520382 11 0
12 1 prepared soups salads 209 Italian Pasta Salad 20 600934 3 1
13 1 prepared soups salads 209 Italian Pasta Salad 20 632958 5 1
14 1 prepared soups salads 209 Italian Pasta Salad 20 650024 14 1
15 1 prepared soups salads 209 Italian Pasta Salad 20 657646 4 1
16 1 prepared soups salads 209 Italian Pasta Salad 20 686260 1 0
17 1 prepared soups salads 209 Italian Pasta Salad 20 789744 3 0
18 1 prepared soups salads 209 Italian Pasta Salad 20 836624 2 0
19 1 prepared soups salads 209 Italian Pasta Salad 20 909037 2 0
tabel3=pd.merge(tabel2,orders,on='order_id')
tabel3.head(n=20)
aisle_id aisle product_id product_name department_id order_id add_to_cart_order reordered user_id eval_set order_number order_dow order_hour_of_day days_since_prior_order
0 1 prepared soups salads 209 Italian Pasta Salad 20 94246 5 0 114082 prior 26 0 20 1.0
1 1 prepared soups salads 22853 Pesto Pasta Salad 20 94246 4 0 114082 prior 26 0 20 1.0
2 4 instant foods 12087 Chicken Flavor Ramen Noodle Soup 9 94246 15 0 114082 prior 26 0 20 1.0
3 4 instant foods 47570 Original Flavor Macaroni & Cheese Dinner 9 94246 14 1 114082 prior 26 0 20 1.0
4 13 prepared meals 10089 Dolmas 20 94246 25 0 114082 prior 26 0 20 1.0
5 13 prepared meals 19687 Butternut Squash With Cranberries 20 94246 6 0 114082 prior 26 0 20 1.0
6 24 fresh fruits 13176 Bag of Organic Bananas 4 94246 24 1 114082 prior 26 0 20 1.0
7 24 fresh fruits 14159 Seedless Watermelon 4 94246 1 1 114082 prior 26 0 20 1.0
8 24 fresh fruits 36082 Organic Mango 4 94246 11 0 114082 prior 26 0 20 1.0
9 51 preserved dips spreads 19415 Roasted Tomato Salsa Serrano-Tomatillo 13 94246 26 0 114082 prior 26 0 20 1.0
10 61 cookies cakes 46373 Donuts, Powdered 19 94246 21 0 114082 prior 26 0 20 1.0
11 63 grains rice dried goods 26313 Pad Thai Noodles 9 94246 2 1 114082 prior 26 0 20 1.0
12 66 asian foods 41481 Kung Pao Noodles 6 94246 3 1 114082 prior 26 0 20 1.0
13 77 soft drinks 19125 Extra Ginger Brew Jamaican Style Ginger Beer 7 94246 27 0 114082 prior 26 0 20 1.0
14 81 canned jarred vegetables 14962 Hearts of Palm 15 94246 12 0 114082 prior 26 0 20 1.0
15 83 fresh vegetables 9839 Organic Broccoli 4 94246 18 1 114082 prior 26 0 20 1.0
16 83 fresh vegetables 29139 Red Creamer Potato 4 94246 20 1 114082 prior 26 0 20 1.0
17 83 fresh vegetables 30027 Organic Chard Green 4 94246 17 0 114082 prior 26 0 20 1.0
18 83 fresh vegetables 41690 California Cauliflower 4 94246 19 1 114082 prior 26 0 20 1.0
19 83 fresh vegetables 46979 Asparagus 4 94246 23 1 114082 prior 26 0 20 1.0
# 做user_id和aisle的交叉表
table=pd.crosstab(tabel3['user_id'],tabel3['aisle'])
table
aisle air fresheners candles asian foods baby accessories baby bath body care baby food formula bakery desserts baking ingredients baking supplies decor beauty beers coolers ... spreads tea tofu meat alternatives tortillas flat bread trail mix snack mix trash bags liners vitamins supplements water seltzer sparkling water white wines yogurt
user_id
1 0 0 0 0 0 0 0 0 0 0 ... 1 0 0 0 0 0 0 0 0 1
2 0 3 0 0 0 0 2 0 0 0 ... 3 1 1 0 0 0 0 2 0 42
3 0 0 0 0 0 0 0 0 0 0 ... 4 1 0 0 0 0 0 2 0 0
4 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 1 0 0 0 1 0 0
5 0 2 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 3
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
206205 0 0 1 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 5
206206 0 4 0 0 0 0 4 1 0 0 ... 1 0 0 0 0 1 0 1 0 0
206207 0 0 0 0 1 0 0 0 0 0 ... 3 4 0 2 1 0 0 11 0 15
206208 0 3 0 0 3 0 4 0 0 0 ... 5 0 0 7 0 0 0 0 0 33
206209 0 1 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 1 0 0 0 3

206209 rows × 134 columns

transfer=sklearn.decomposition.PCA(n_components=0.95)
new_table=transfer.fit_transform(table)
new_table.shape
# 降维成功从134个特征到44个特征
(206209, 44)

4.机器学习算法训练

4.1详解转换器类和预估器类

  • 回顾之前的特征工程,我们对数据做处理前都要实例化一个转换器类,再调用fit_tranform方法进行转换。实际上fit_transform方法是fit方法和transform方法的一个封装。fit方法计算特定转换所需的的数据。最后由transform方法完成最后的转换。

  • 如同特征工程要实例化一个转换器,在机器学习算法中我们要实例化一个估计器类。

  • 利用估计器进行机器学习的流程
    (1)实例化一个估计器estimator
    (2)调用fit方法——训练计算出模型
    (3)模型评估
      (i)直接比较预测值和真实值来评价模型
        y_predict=estimator.predict(test_data)
        y_predict==test_target
      (ii)计算模型准确率评估模型
        accuracy=estimator.score(test_data,test_target)


4.2模型选择与调优

  • 超参数:在实例化estimator时传递的参数被称为超参数(hyper-parameters)

  • n折交叉验证:是将训练集再划分为n部分,依次去取中一份作为Validation Set,其余分作为Train Set。取n次模型验证得分的均值作为模型得分。可以配合网格搜索来做模型选择。

  • 网格搜索:是我们给出超参数的组合,它通过遍历的方式根据交叉验证得分得到使得模型最佳的超参数组合

  • sklerarn的模型选择可以用model_selection做

  • 注意:最终模型准确率和交叉验证的最佳准确率并不相同,是因为交叉验证的最佳准确率是用验证集得到的,而最终模型评价的准确率是用测试集得到的

  • 实例化的GridSearchCV类实现了fit(计算)和score(模型评估)等的方法。于是可直接用于模型训练和评估

笔记——机器学习入门相关推荐

  1. 学习笔记--机器学习入门

    1.概念 利用计算机从历史数据中找出规律,并把这些规律用到对未来不确定场景做决策. 计算机是机器学习的驱动主体,数据分析主体为人,一般靠分析师的经验和知识水平,存在一定的局限性:历史数据则是对预判决策 ...

  2. Data Mining Machine Learning学习笔记 机器学习入门笔记 之jieba分词(中文分词)(二)

    第二章 Rationlism & Empiricism 理性主义和经验主义 Rationalism (按照人类的方式进行处理,做词法,语法,语义分析) Natural Language Pro ...

  3. 机器学习入门系列(2)--如何构建一个完整的机器学习项目(一)

    上一篇机器学习入门系列(1)–机器学习概览简单介绍了机器学习的一些基本概念,包括定义.优缺点.机器学习任务的划分等等. 接下来计划通过几篇文章来介绍下,一个完整的机器学习项目的实现步骤会分为几步,最后 ...

  4. 十年公务员转行IT,自学AI三年,他淬炼出746页机器学习入门笔记

    整理 | Jane 编辑 | Just 出品 | AI科技大本营(ID:rgznai100) 近期,梁劲传来该笔记重大更新的消息.<机器学习--从入门到放弃>这本笔记的更新没有停止,在基于 ...

  5. 《基于张量网络的机器学习入门》学习笔记7

    <基于张量网络的机器学习入门>学习笔记7 量子算法 什么是量子算法 三个经典量子算法 Grover算法 背景 基本原理 例题 量子算法 什么是量子算法 例如我们求解一个问题,一个111千克 ...

  6. 《基于张量网络的机器学习入门》学习笔记6

    <基于张量网络的机器学习入门>学习笔记6 密度算符(密度矩阵) 具体到坐标表象 在纯态上 在混合态上 纯态下的密度算符 混合态下的密度算符 密度算符的性质 量子力学性质的密度算符描述 第一 ...

  7. 《基于张量网络的机器学习入门》学习笔记5

    <基于张量网络的机器学习入门>学习笔记5 量子概率体系 事件 互斥事件 概率与测量 不相容属性对 相容属性对 量子概率与经典概率的区别 量子测量 量子概率体系 我们将经典的实数概率扩展到复 ...

  8. 《基于张量网络的机器学习入门》学习笔记4

    <基于张量网络的机器学习入门>学习笔记4 量子概率 将概率复数化 分布与向量的表示 事件与Hilbert空间 不兼容属性及其复数概率表示 为什么一定要复数概率 量子概率 将概率复数化 在经 ...

  9. TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅

    TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅读 ...

最新文章

  1. Spring整合Hibernate的步骤
  2. Java 程序员必须掌握的 10 款开源工具!
  3. 火热物联网下,中国传感器的冷思考
  4. hibernate三级缓存概括
  5. Vue-router 报NavigationDuplicated的可能解决方案
  6. Android中RatingBar的自定义效果
  7. 精通 Oracle+Python 存储过程、Python 编程
  8. Linux文件的复制、删除和移动命令
  9. html 文件路径 d files,tmpfiles.d
  10. NOIP 2017 总结
  11. 【问题收集·知识储备】Xcode只能选择My Mac,不能选择模拟器如何解决?
  12. android已停止三星,急,android离线打包程序三星下总报 程序 已停止
  13. html文本框最小数字,HTML5中的数字类型的输入框:数字选择器
  14. 基于Java Bean Validation对Request参数进行校验的设计思路
  15. Ubuntu 网络配置
  16. 111-unsplash-for-chrome-2021-07-22
  17. 怎么区分zh和ch_如何区分汉语拼音“z,c,s”与“zh,ch,sh”的发音?
  18. vim + vundle + YCM+自动格式化
  19. 微信小程序链接后台接口,进行数据交互
  20. 天梯赛 L2-001 紧急救援 (25 分)

热门文章

  1. 【C#】简易计算器的实现
  2. MFC Edit Control编辑框中值得获取方法总结
  3. 百度地图SDKV2.0图层加载
  4. 基于Origin2019:多Y轴图绘制
  5. if语句—交互程序二
  6. ULEI Token(友利代币)
  7. 考研初试、复试分数线、考研信息查询网站、考研国家线、34所学校自划线、考研A区、B区、考研调剂、全国学科排名、全国各省市研招网等考研相关信息汇总
  8. 领域驱动设计(DDD):领域接口化设计
  9. 2020年总结!翻过这座山,他们就会听到你的故事!
  10. 怀疑自己的笔记本电脑可能受到了网络攻击被人监视或操控