机器学习过程步骤总结

  • 载入数据
    • 导入类库、类和方法
    • 载入数据集
    • 数据理解
      • 查看数据
      • 描述性统计
      • 数据分组分布(适用于分类)
      • 数据属性的相关性
      • 数据分布分析
      • 数据分析可视化
    • 数据准备
      • 数据清洗
      • 特征选择
      • 数据转化
    • 评估审查算法模型
      • 算法审查
        • 分类算法
        • 回归算法
      • 分离数据集方式
      • 算法比较
    • 优化模型
      • 算法调参
      • 集成算法
    • 结果部署
      • 训练模型
      • 预测评估测试数据集

载入数据

导入类库、类和方法以及载入数据集

导入类库、类和方法

导入语法:
from … import … as …
from … import …
import … as …
import …

载入数据集

数据集一般存储为csv文件,使用pandas的read_csv读取数据
DataFrame pandas.read_csv函数部分参数介绍:
filepath_or_buffer:url或者文件路径;
sep : str, default ‘,’指定分隔符。如果不指定参数,则会尝试使用逗号分隔;
delimiter : str, default None定界符,备选分隔符(如果指定该参数,则sep参数失效);
delim_whitespace : boolean, default False. 指定空格(例如’ ‘或者’ ‘)是否作为分隔符使用,等效于设定sep=’\s+’。如果这个参数设定为Ture那么delimiter 参数失效;
skip_blank_lines=True,忽略注释行和空行
header : int or list of ints,指定用作列名的行号,也表示数据的开头。默认行为是推断列名,如果没有传递列名即names参数,则行为与header=0相同,并且从文件的第一行推断列名,如果显式传递列名即names参数,则行为与header=None相同。
names : array-like, default None 要使用的列名列表,此列表中不允许有重复项。如果文件包含标题行,则应显式传递header=0,用names覆盖列名数据从第二行开始读取,如果数据文件中没有列标题行,则应执行header=None;
usecols: array-like, default None返回一个数据子集,该列表中的值必须可以对应到文件中的位置(数字可以对应到指定的列)或者是字符传为文件中的列名。例如:usecols有效参数可能是 [0,1,2]或者是 [‘foo’, ‘bar’, ‘baz’]。
na_values:取值类型,标量,str, list-like, or dict,要识别为NA/NaN的其他字符串。默认情况下,以下值被解释为NaN:“,”N/A“,”N/A N/A“,”NA“,”-1.#IND“,”-1.#QNAN“,”NaN“,”-NaN“,”1.#IND“,”1.#QNAN“,”NA>“,”N/A“,”NA“,”NULL“,”NaN/A“,”NaN“,”NULL“。
keep_default_na:bool,default True,解析数据时是否包含默认的NaN值
na_filter:布尔,默认为True
检测缺少的值标记(空字符串和na_values值指定的值)。在没有任何NAs的数据中,传递na_ filter=False可以提高读取大文件的性能。
请注意,如果na_filter作为False传入,则keep_default_na和na_values参数将被忽略。

返回值:DataFrame

数据理解

查看数据

pandas的DataFrame对象提供了很多方法
数据列:data.columns
数据类型:data.dtypes
数据信息:data.info()
数据维度:data.shape
按行查看数据
data.head(10)
data.tail()
使用列名查看数据
data[‘列名’]
data[[‘列名1’,‘列名2’,…]]
布尔索引:使用与DataFrame索引长度相同的布尔向量从DataFrame中选择行查看 df[[True,False…]]
loc:通过⾏标签或列标签获取指定⾏、列数据
data.loc[[行],[列]] 行、列标签
iloc : 通过行索引或列索引获取⾏数据
data.iloc[[行],[列]] 行、列索引
iloc传⼊的是行或列索引,loc是行或列的标签
查看缺失值
查看包含缺失值的列
data.isnull().any(axis=0)
查看各行是否存在空值 得到布尔序列
data.isnull().any(axis=1)
查看各行是否存在空值 得到布尔序列,用布尔序列去除空值的行
data[data.isnull().any(axis=1)]
查看每列缺失值数量
data.isnull().sum()

描述性统计

data.describe()

数据分组分布(适用于分类)

data.groupby(‘class’).size() 按class列分组统计样本数量查看数据分布情况,分布是否平衡
data.groupby(‘class’).count() 按class列分组统计每列特征的样本数量

数据属性的相关性

data.corr(method=‘pearson’) 使用pearson查看两两特征之间的相关关系,小于0负相关,大于0正相关

数据分布分析

data.skew() 结果显示数据属性的高斯分布偏离情况,是左偏还是右偏,小于0为左偏态(负偏态),大于0为右偏态(正偏态)。左偏分布的均值(Mean)在众数(Mode)的左边。右偏,同理。

数据分析可视化

直方图
dataframe.hist()
密度图
dataframe.plot(kind=‘density’,subplots=True,layout=(,),sharex,sharey)
箱线图
dataframe.plot(kind=‘box’,subplots=True,layout=(,),sharex,sharey)
相关矩阵图
correlations = data.corr() 得到相关矩阵
ax.matshow(correlations,vmin=-1,vmax=1) 将矩阵数据画出来
散点矩阵图
pandas.plotting.scatter_maxtrix(dataframe)

数据准备

数据清洗

删除缺失值
缺失值处理
axis=0按行删除,样本(每行)中由缺失值删除该样本(行)默认axis=0
axis=1按列删除,每列特征中由缺失值删除该列特征
data.dropna(axis=0)

如果某个特征包含的缺失值特别多,如包含80%以上是缺失值,按列删除,删除该列特征。

特征选择

单变量特征选择
sklearn.feature_selection.SelectKBest
sklearn.feature_selection.chi2
SelectKBest(score_func=chi2,k=4).fit_transform(X)
使用卡方检验选择评分最高的4个特征
递归特征消除
sklearn.feature_selection.RFE
RFE(LogisticRegression(),3).fit_transform(X)
使用逻辑回归基模型递归选择3个特征
主要成分分析
sklearn.decomposition.PCA
PCA(n_components=3).fit_transform(X)
降维为3列特征

数据转化

调整数据尺寸
sklearn.preprocessing.MinMaxScaler
MinMaxScaler(feature_range=(0,1)).fit_transform(X)

minMaxScaler= MinMaxScaler(feature_range=(0,1)).fit(X)
X = minMaxScaler.transform(X)
正态化数据
sklearn.preprocessing.StandardScaler
X = StandardScaler().fit_transform(X)

standardScaler = StandardScaler().fit(X)
X = standardScaler.transform(X)
标准化数据
sklearn.preprocessing.Normalizer
X =Normalizer().fit_transform(X)

normalizer = Normalizer().fit(X)
X = normalizer .transform(X)
二值数据
sklearn.preprocessing.Binarizer
Binarizer(threshold=0.0).fit_transform()
注意将数据集分为训练集和测试集后进行数据转化,使用训练集的拟合得到转化器后,直接用于测试集。以正态化数据为例用法如下:
standardScaler = StandardScaler().fit(X_train)
X_train = standardScaler.transform(X_train)
X_test = standardScaler.transform(X_test )

评估审查算法模型

首先会将原始数据集分为三部分:训练集、验证集和测试集。
训练集用于训练模型,验证集用于选择模型,测试集对于模型来说是未知数据,用于评估模型的泛化能力。这个方法操作简单,只需随机把原始数据分为三组即可。不过如果只做一次分割,它对训练集、验证集和测试集的样本数比例,还有分割后数据的分布是否和原始数据集的分布相同等因素比较敏感,不同的划分会得到不同的最优模型,而且分成三个集合后,用于训练的数据更少了。于是有了k 折交叉验证(k-fold cross validation)加以改进:K折交叉验证:将可用数据划分为K个份(K通常取4或5),实例化K个相同的模型,将每个模型在K-1份数据上训练,并在剩下的一份数据上进行评估。模型的验证分数等于K个验证分数的平均值。如果训练数据集相对较小,则增大k值。使用K折交叉验证不同算法模型,在验证集上比较不同模型,选择模型后,测试集上比较不同超参。

算法审查

分类算法

线性算法:
逻辑回归
sklearn.linear_model.LogisticRegression
model = LogisticRegression(max_iter=10000)
线性判别分析
sklearn.discriminant_analysis.LinearDiscriminantAnalysis
model=LinearDiscriminantAnalysis()
非线性算法
K近邻算法
sklearn.neighbors.KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=5)
贝叶斯分类器
sklearn.naive_bayes.GuassianNB
model = GuassianNB()
分类与回归树(决策树)
sklearn.tree.DecisionTreeClassifier
model = DecisionTreeClassifier()
支持向量机
sklearn.svm.SVC
model = SVC()

回归算法

线性算法:
线性回归算法
sklearn.linear_model.LinearRegression
model = LinearRegression()
**岭回归 **
sklearn.linear_model.Ridge
model = Ridge()
套索回归
sklearn.linear_model.Lasso
model = Lasso()
弹性网络回归
sklearn.linear_model.ElasticNet
model = ElasticNet()
非线性算法:
K近邻算法
sklearn.neighbors.KNeighborsRegressor
model = KNeighborsRegressor()
分类与回归树
sklearn.tree.DecisionTreeRegressor
model = DecisionTreeRegressor()
支持向量机
sklearn.svm.SVR
model = SVR()

分离数据集方式

分离数据集为测试集与训练集
sklearn.model_selection.train_test_split
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.3,random_state=seed)
K折交叉验证
创建10折交叉验证迭代器
sklearn.model_selection.KFold
kfold=KFold(n_splits=10,shuffle=True,random_state=7)

弃一交叉验证
sklearn.model_selection.LeaveOneOut
sklearn.model.selection.cross_val_score loocv=LeaveOneOut() cross_val_score(model,X_train,Y_train,cv=loocv,scoring=scoring)
重复随机分离数据集
sklearn.model_selection.ShuffleSplit
sklearn.model_selection.cross_val_score
kf =ShuffleSplit(n_splits=10,test_size=0.3,random_state=7) cross_val_score(model,X_train,Y_train,cv=kf,scoring=scoring)

算法比较

cross_val_score交叉验证方式验证模型model, scoring指定评估模型标准
sklearn.model.selection.cross_val_score
cross_val_score(model,X_train,Y_train,cv=kfold,scoring=scoring)
分类算法评估矩阵
交叉验证cross_val_score(model,X,Y,cv,scoring)
scoring参数取值:
正确率(准确率):‘accuracy’,分类算法scoring默认值
对数损失函数:‘neg_log_loss’
AUC:‘roc_auc’
精确率:“precision”
召回率:“recall”
f1分数:“f1”
精确率、召回率、f1分数默认正类为数据集中标签为"1"的类
回归算法评估矩阵
交叉验证cross_val_score(model,X,Y,cv,scoring)
scoring参数取值:
平均绝对误差:‘neg_mean_absolute_error’
均方误差:‘neg_mean_squared_error’
R2决定系数:‘r2’ 回归算法scoring默认值

优化模型

算法调参

网格搜索优化参数
sklearn.model_selection.GridSearchCV
GridSearchCV(estimator=model,param_grid={‘param_name’:[,]})
随机搜索优化参数
sklearn.model_selection.RandomizedSearchCV RandomizedSearchCV(estimator=model,param_grid={‘param_name’:uniform()})

集成算法

装袋算法:
装袋决策树
sklearn.ensemble.BaggingClassifier
sklearn.tree.DecisionTreeClassifier
model = BaggingClassifier(base_estimator=DecisionTreeClassifier(),n_estimators=100,random_state=7)
随机森林
sklearn.ensemble.RandomForestClassifier
model = RandomForestClassifier(n_estimators=100,random_state=7,max_features=3)
极端随机树
sklearn.ensemble.ExtraTreesClassifier
model = ExtraTreesClassifier(n_estimators=100,random_state=7,max_features=3)
提升算法:
AdaBoost
sklearn.ensemble.AdaBoostClassifier
model =AdaBoostClassifier(n_estimators=100,random_state=7)
随机梯度提升
sklearn.ensemble.GradientBoostClassifier
model = GradientBoostClassifier(n_estimators=100,random_state=7)
投票算法
sklearn.ensemble.VotingClassifier
model =VotingClassifier(estimators=models)

结果部署

训练模型

由以上步骤确定模型,使用训练集训练模型 model.fit(X_train)

预测评估测试数据集

model.score(X_test)
该函数分类算法计算正确率
回归算法计算R2系数
混淆矩阵
sklearn.metrics.confusion_matrix
predicted = model.predict(X_test)
confusion_matrix(Y_test,predicted)
分类报告
sklearn.metrics.classification_report
predicted=model.predict(X_test)
classification_report(Y_test,predicted)
序列化模型
pickle
保存模型dump
加载模型load
joblib
保存模型dump
加载模型load

机器学习过程步骤总结相关推荐

  1. 机器学习过程中的数据预处理和特征选择方法

    1.数据清洗 数据清洗(data cleaning)是在机器学习过程中一个不可缺少的环节,其数据的清洗结果直接关系到模型效果以及最终的结论.在实际的工作中,数据清洗通常占开发过程的50%-80%左右的 ...

  2. 心得丨走过最长的路,就是机器学习过程中的弯路

    营长的一位转型AI的朋友,最近对营长抱怨,"走过的最远的路,就是机器学习过程中的弯路",然后开始各种blablabla,从论文的坑,到模型的坑,再到培训的坑...一路吐槽. 尤其是 ...

  3. 你走过最长的路 ,就是机器学习过程中的弯路

    营长的一位转型AI的朋友,最近对营长抱怨,"走过的最远的路,就是机器学习过程中的弯路",然后开始各种blablabla,从论文的坑,到模型的坑,再到培训的坑...一路吐槽. 2 尤 ...

  4. 新手如何避开机器学习过程中的弯路

    一位转型AI的朋友最近抱怨,"走过的最远的路,就是机器学习过程中的弯路",然后开始各种blablabla,从论文的坑,到模型的坑,再到培训的坑...一路吐槽. 尤其是论文,他骂道: ...

  5. 你走过最长的路,就是机器学习过程中的弯路

    营长的一位转型AI的朋友,最近对营长抱怨,"走过的最远的路,就是机器学习过程中的弯路",然后开始各种blablabla,从论文的坑,到模型的坑,再到培训的坑...一路吐槽. 尤其是 ...

  6. 机器学习中的随机过程_机器学习过程

    机器学习中的随机过程 If you would like to get a general introduction to Machine Learning before this, check ou ...

  7. Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)

    所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的 ...

  8. 端到端机器学习_使用automl进行端到端的自动化机器学习过程

    端到端机器学习 Prerequisite: 先决条件: - Docker -码头工人 - Jupyter Notebook -Jupyter笔记本 - Python and Pip -Python和P ...

  9. YouTube推荐!动画版机器学习过程 How Machines Learn ?

    @CGP GREY发布了一个叫做 "How Machines Learn"的动画短视频,在短短几天被翻译成九种语言.它讲述了一位机器人在进行深度学习时的心理活动--看完后程序员们纷 ...

最新文章

  1. ubuntu phpinfo mysql_Ubuntu 16.04 apache+php+mysql环境搭建
  2. weedfs java_初窥weedfs分布式文件系统
  3. linux-telnet服务配置
  4. NHibernate学习(转)
  5. error: storage class specified for parameter问题
  6. USTC 2011 homework list [现代软件工程 作业]
  7. 光伏等新能源信用风险事件频繁爆发
  8. 华为云数据库携新品惊艳亮相2019华为全联接大会
  9. 解决办法:java.lang.UnsatisfiedLinkError ... Can't find dependent libraries
  10. c++操作打印机那些事
  11. 无需编码,可一键生成前后端代码,少写80%的代码!
  12. python高德地图api调用实例_Python玩转高德地图API(二)
  13. PDPS汉化包安装与语言界面切换操作
  14. iP网络广播系统服务器搭建,IP网络智能公共广播系统V2.0
  15. 自动控制原理7.7---离散系统的数字校正
  16. Mac下iTerm2美化
  17. bootstrap4 调整元素之间距离 margin 和padding
  18. C++鼠标锁定或乱跳(坑人必备)
  19. ACCESS备件管理数据库分类出入库改进
  20. vi/vim滚动屏幕

热门文章

  1. 学习python记录——第五天
  2. Python+Excel:批量重命名多个工作簿
  3. JS实现元素拖拽,简单悬浮框实现
  4. Sp是如何走到这一步
  5. 考研:2023寒假复习及2022复试问题
  6. 空气能热水器的优惠价格在哪里找?
  7. 如何使用Kotlin构建Android旋转旋钮以帮助儿子练习钢琴
  8. [c++] 常成员函数
  9. afn访问本地html,Swift利用AFN实现封装网络请求详解
  10. 谷歌浏览器注入的样式表 (更改了我网页的样式)