从零开始通往Kaggle竞赛之路---第一章简介篇

    xiaoxiao2025-05-30  94

    第一章 简介篇

    1.1 机器学习综述1.1.1 任务1.1.2 经验1.1.3 性能 1.2 python编程库1.2.1 为什么使用python1.2.2 python机器学习的优势1.2.3 Numpy & Scipy1.2.4 Matplotlib1.2.5 Scikit-learn1.2.6 Pandas1.2.7 Anaconda 1.3 python环境配置1.3.1 Windows系统环境1.3.2 Mac OS 系统环境 1.4 python编程基础1.4.2 python数据类型1.4.3 python数据运算1.4.4 python流程控制1.4.5 python函数(模块)设计1.4.6 python编程库(包)的导入1.4.7 python基础综合实践 1.5 章末小节

    1.1 机器学习综述

    所谓具备学习能力的程序都是值它能够不断地从经历和数据中吸取经验教训,从而应对未来的预测任务。我么习惯地把这种对未知的预测能力叫泛化能力。

    1.1.1 任务

    机器学习的任务有多种,本书侧重于对两类经典的任务进行讲解和实践:监督学习和无监督学习。其中监督学习关系对事物未知表现的预测,一般包括分类问题和回归问题;无监督学习则倾向于对事物本身特性的分析,常用的技术包括数据降维和聚类问题等。

    分类问题,是对其所在的类别进行预测。类比是离散值,并且预先知道类别的数量。比如,根据一个人的身高、体重和三围等数据,预测其性别;这里的性别既是离散值也是提前预知的.或者,根据一朵鸢尾花的花瓣、花萼的长度等数据,判断其属于哪个鸢尾花亚种;鸢尾花亚种的种类与数量也满足离散和预先知晓这两个条件,因此也是一个分类预测问题。

    回归同样是预测问题,只是预测的目标往往是连续变量。比如,根据房屋的面积、地理位置、建筑年代等进行销售价格的预测,销售价格就是一个连续变量。

    数据降维是对事物的特性进行压缩和筛选,这项任务比较抽象。如果我们没有特定的领域知识,是无法预先确定采样哪些数据的;而如今,传感设备的采样成本相对较低,相反,筛选有效信息的成本较高。比如,在识别图像中人脸的任务中,我们可以直接读到图像的像素信息。若是直接使用这些像素信息,那么数据的维度会非常高,特别是在图像分辨率越来越高的今天。因此,我们通常会利用数据降维的技术对图像进行降维,保留最具有区分度的像素组合。

    聚类则是依赖于数据的相似性,把相似的数据划分为一个簇。不同于分类问题,我们在大多数情况下不会预先知道簇的数量和每个簇的具体含义。现实生活中,大型电子商务网站经常会对用户的信息和购买习惯进行聚类分析,一旦找到数量不菲并且背景相似客户群,便可以针对他们的兴趣投放广告和促销信息。

    1.1.2 经验

    我们习惯性地把数据视作经验.事实上,只有那些对学习任务有用的特定信息才会被列入考虑范围。而我们通常把这类反映教据内在规律的信息叫做特征。比如,在前面提到的人脸图像识别任务中.找们很少直接把图像最原始的像家信息作为经毅交给学习系统;而是进一步通过降维.甚至一些更为复杂的数据处理方法得到更加有助于人脸识别的轮廓特征。

    无监督学习问题自然就没有标记/目标,因此也无法从事预测任务,却更加适合对数据结构的分析。正是这个区别.我们经常可以获得大最的无监督效据.而监督教据的标注因为经常耗费大量的时间、金钱和人力.所以数据量相对较少。

    另外.吏为重要的是.除 了标记/目标的表现形式存在离散、连续变量的区别,从原始数据到特征向量转化的过程中,也会通遇多种数据类型:类别型( Categorical )特征.数值型( Numerical )特征,甚至是缺失的数据( Missing Value)等.实际操作过程中.我们都需要把这终特征转化为且体的数值参与运算。

    1.1.3 性能

    所谓性能,便是评价所完成任务质量的指标。我们将模型所预测的结果和对应的正确答案进行对比。

    对待预测性质的问题,我们经常关注预测的精度。具体来讲,我们要根据预测正确类别的百分比来评价其性能,这个指标通常被称作准确性(Accuracy);回归问题则无法使用类似的指标,我们通常会衡量预测值与实际值之间的偏差大小。

    1.2 python编程库

    这一节我们需要向读者解释为什么要使用python从事机器学习任务,并且为大家推荐几种最为常用,同时也是功能强大的编程库。本书将围绕这些编程库,教会大家如何快速搭建机器学习的系统,甚至用于竞赛实战。

    1.2.1 为什么使用python

    python将许多高级编程语言集于一身,不仅可以像脚本语言一样,用非常精炼易读的几行代码来完成一个需要使用C语言通过复杂编码才可以完成的任务;而且还具备面向对象编程语言的各式各样的强大功能。不同于C语言等编译型语言,python是一门可解释性语言,非常便于代码调试。并且python免费和跨平台的特性,也赢得了越来越多使用者和带来了越来越多开源库的贡献。

    1.2.2 python机器学习的优势

    方便调试的解释型语言跨平台执行工作广泛的应用编程接口丰富完备的开源工具包

    1.2.3 Numpy & Scipy

    参考链接: http://www.numpy.org/ https://www.scipy.org/

    1.2.4 Matplotlib

    Matplotlib是一款python编程环境下免费试用的绘图工具包。 在线文档:https://matplotlib.org/contents.html

    1.2.5 Scikit-learn

    Scikit-learn是本书所使用的核心程序库,依托上述几种工具包,封装了大量经典和最新的机器学习模型。 官方文档:https://scikit-learn.org/stable/user_guide.html

    1.2.6 Pandas

    pandas是一款针对数据处理和分析的python工具包,其中实现了大量便于数据读写、清洗、填充以及分析的功能。帮助我们节约了大量用于数据预处理工作时的代码。 官方文档:http://pandas.pydata.org/pandas-docs/stable/

    1.2.7 Anaconda

    集成平台。 官方文档:http://docs.continuum.io/

    1.3 python环境配置

    python有2.x和3.x版本。由于一些历史遗留问题,这两个版本无法互相兼容,有些地方连编程语法也不一样,我们建议安装python3.x版本。

    1.3.1 Windows系统环境

    https://blog.csdn.net/piaoliangjinjin/article/details/81945772

    1.3.2 Mac OS 系统环境

    https://www.jianshu.com/p/32d95b373aa2

    1.4 python编程基础

    简单介绍下。

    1.4.2 python数据类型

    python常用的数据类型一共有6种。数字(Number)、布尔值(Boolean)、字符串(String),还有复杂一些的元组(Tuple)、列表(List)以及字典(Dictionary)。

    数字:常用的数字类型包括整型数(Integer)、长整型数(Long)、浮点数(Float)以及复杂型数(Complex)。布尔值:True代表真,False代表假。字符串:字符串的表示可以使用成对的英文单引号或者双引号辅助进行表示:‘a’,“abc”.元组:使用小括号()来表示。在访问元组的时候不可以修改元组中的数据。元组中的数据类型不必统一,我们可以按照索引直接从元组中找到我们要的数据。列表:列表用中括号[]来表示,在访问列表的时候可以修改其中的数据。字典:在数据处理任务中,字典几乎成了数据存储的主流形式。它包括多组键(key);值(value)对.用大括号{}来表示它。

    1.4.3 python数据运算

    算数运算:加法(+)、减法(-)、乘法(*)、除法(/)、取模(%)以及幂指数(**)运算。比较运算:返回布尔类型的结果赋值运算逻辑运算:and or not成员运算

    1.4.4 python流程控制

    在一些情况下,我们需要选择执行或者重复执行某个代码片段。这样就需要一些特殊的流程控制,使得解释器可以跳跃甚至回溯代码,比较常见的包括分支语句(if)和循环控制(for)。

    1.4.5 python函数(模块)设计

    在面对大型项目的时候,随着堆砌的代码越来越多,编程人员发现有很多功能重复的模块被反复的键入和执行。因此,大家开始考虑是否可以将这些功能具体且被经常使用的代码段,从程序中抽离出来并单独封装。于是,函数(Function)/模块(Model)的概念出现在了编程语言里。

    1.4.6 python编程库(包)的导入

    import导入内嵌在python里面的包。

    1.4.7 python基础综合实践

    这里,我们提供完整的“良/恶性乳腺癌肿瘤预测”问题的python源代码。在必要的地方会予以注释。

    import pandas as pd import warnings warnings.filterwarnings('ignore') df_train = pd.read_csv('breast-cancer-train.csv') df_test = pd.read_csv('breast-cancer-test.csv') df_train.head()

    选取'Clump Thickness'和'Cell Size'作为特征,构建测试集中的正负样本分类 df_test_negative = df_test.loc[df_test['Type'] == 0][['Clump Thickness', 'Cell Size']] df_test_positive = df_test.loc[df_test['Type'] == 1][['Clump Thickness', 'Cell Size']] df_test_negative.head()

    绘制良性肿瘤和恶性肿瘤样本点,良性肿瘤标记为红色的o,恶性肿瘤标记为黑色的x。 import matplotlib.pyplot as plt plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'], marker = 'o', s=200, c='red') plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'], marker = 'x', s=150, c='black') plt.xlabel('Clump Thickness') plt.ylabel('Cell Size') plt.show()

    利用numpy中的random函数随机采样直线的截距和距离 import numpy as np intercept = np.random.random([1])#s随机生成一个0-1之间的小数,这里指的是截距 coef = np.random.random([2])# 随机生成两个0-1之间的小数,这里指的是斜率 lx = np.arange(0, 12) ly = (-intercept - lx * coef[0]) / coef[1] plt.plot(lx, ly, c='yellow')#绘制一条随机直线 plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'], marker = 'o', s=200, c='red') plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'], marker = 'x', s=150, c='black') plt.xlabel('Clump Thickness') plt.ylabel('Cell Size') plt.show()

    导入sklearn中的逻辑回归分类器,使用前10条训练样本学习直线的系数和截距。然后调用score函数查看测试集的精度 from sklearn.linear_model import LogisticRegression lr = LogisticRegression() lr.fit(df_train[['Clump Thickness', 'Cell Size']][:10], df_train['Type'][:10]) print( 'Testing accuracy (10 training samples):'), lr.score(df_test[['Clump Thickness', 'Cell Size']], df_test['Type']) Testing accuracy (10 training samples): (None, 0.8685714285714285) 原本这个分类面应该是Ixcoef[0]+Iycoef[1]+interecpt=0,映射到2维平面上之后,转换为ly = (-intercept - lx coef[0]) / coef[1] 利用逻辑回归分类器得到的斜率和截距,但是注意这个截距和斜率是我们利用训练集的前10个数据得到的,我们重新绘制图形 intercept = lr.intercept_ #截距 coef = lr.coef_[0, :]# 斜率 ly = (-intercept - lx * coef[0]) / coef[1]#利用逻辑回归分类器得到的截距和斜率生成新的公式 plt.plot(lx, ly, c='green') plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'], marker = 'o', s=200, c='red') plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'], marker = 'x', s=150, c='black') plt.xlabel('Clump Thickness') plt.ylabel('Cell Size') plt.show()

    我们fit训练集的所有样本之后得到的截距和斜率,然后再绘制图像,效果比之前提高不少 lr = LogisticRegression() lr.fit(df_train[['Clump Thickness', 'Cell Size']], df_train['Type']) print( 'Testing accuracy (all training samples):'), lr.score(df_test[['Clump Thickness', 'Cell Size']], df_test['Type']) Testing accuracy (all training samples): (None, 0.9371428571428572) intercept = lr.intercept_ coef = lr.coef_[0, :] ly = (-intercept - lx * coef[0]) / coef[1] plt.plot(lx, ly, c='blue') plt.scatter(df_test_negative['Clump Thickness'],df_test_negative['Cell Size'], marker = 'o', s=200, c='red') plt.scatter(df_test_positive['Clump Thickness'],df_test_positive['Cell Size'], marker = 'x', s=150, c='black') plt.xlabel('Clump Thickness') plt.ylabel('Cell Size') plt.show()

    1.5 章末小节

    主要交代了: 1.什么是机器学习 2.机器学习的三要素 3.为什么使用python来实践机器学习 4.本书预期使用哪些python的编程库来进行机器学习的快速实践。

    最新回复(0)