【有书共读】跟老齐学Python 读书笔记14

4.5 分析希腊葡萄酒数据
这次Florents 提供了一个爬虫工具。


























4.6 应用本福特定律

再解释本福特定律之前,先看一个统计实例。
根据《维基百科》的“国家人口列表”词条的数据,建立一个CSV文件。



下面研究苹果公司的股票。












第 5 章 机器学习
5.1 线性回归
1. 线性回归简述
“回归”分析是统计学和机器学习中常用的一种方法,英文是Regression。据《维基百科》解释,这个词最早是由弗朗西斯·高尔顿(Francis Galton)开始使用的。他发现父母的身高虽然会遗传给子女,但子女的身高却有逐渐“回归到中等(人的平均值)”的现象。
虽然现在的“线性回归”己经不是“回归到中等”了,但依然使用这个词语。现代统计学和机器学习语境中的“回归”是指通过对数据(自变量和因变量)的分析,找到某种规律,建立数学模型(自变量和因变量之间的函数关系)。
目前为止,人类中的天才们己经为“回归”提供了几种数学模型,比如“线性模型”,通常就把利用这种模型所进行的分析称为“线性回归”。此外还有Logistic Regression、Polynomial Regression、Ridge Regression等―姑且仅给出英文名称。
线性回归,因其简单、适用面广,一直以来被认为是统计学和机器学习入门必学的。所以,本节就以线性回归为例,讲解机器学习的一般研究思路。
发展于伽利略、牛顿年代的一套科学研究方法,经过众多大师的锤炼,日臻完善,并从物理学拓展到其他学科门类―物理是科学的基础,绝不是自吹自擂。这套方法对线性回归乃至于机器学习都适用,简而言之,其步骤如下。

第一步:收集数据。可以通过观测、实验,利用各种测量工具收集被研究对象的相关数据,形成“数据集”。当然,在网络环境中,还可以通过“网络爬虫”、API等方式获得数据。
第二步:归纳规律。归纳规律的方法有很多种,一般需要与专业知识相配合。比如,在坐标系中画出数据集的散点图,然后找规律―这个规律通常用数学表达式来体现。“一种科学,只有成功地运用数学时,才算达到了真正完善的地步”(据说是马克思说的,但没有查找到出处),能够用数学表达的规律,不仅严谨,也体现着简洁美―这种美需要有专业知识才能体验。
第三步:用新的数据验证规律,实际应用也是验证。
第四步:修正或者突破原有规律,发现新的规律。

在机器学习中,不论使用哪种算法,这个过程。基本上都是按照上述流程进行的。接下来读者会亲历

2.研究一个古老定律

还记得在3.3节中所画的散点图吗?点图中各个数据点的分布规律。我们根据散点图画出了一条直线,用这条直线代表散
体到每个数据点,如果用数学方式来表示图中的直线,可以写成如y=a+bx,具相对于直线方程还可以有一定的误差。
函数夕二a+bx就是线性模型的一种函数―这种回归叫作“线性回归”(英文是Linear Regression),通常其因变量(y)是连续的,自变量(x)可以是连续的,也可以是离散的。
有数学表达式之后,就可以用它来检验新的自变量数据,预见因变量的变化。但是其中的。、b是需要通过己知数据集计算得到的。确定系数a、b的过程称为“拟合”,“最小二乘法”是一种常用的拟合方法―关于“最小二乘法”的数学问题,此处默认读者己经了解一二。
最后要注意,拟合出来的不一定都是直线,也不一定都是一次函数的形式。
代码:











3. scikit-learn 的工具
关于“线性回归”的工具,出statsmodels外,著名的机器学习库scikit-learn也提供了非常好的工具-LinearRegression。
(1)普通最小二乘法



(2)多项式函数
使用klearn.preproncessing.PolynomialFeature来创建多项式函数。

rom sklearn.base import TransformerMixin
from sklearn.base import BaseEstimator
from sklearn.pipeline import Pipeline
from sklearn.pipeline import make_pipeline
class FooTransformer(TransformerMixin):
    def __init__(self, number):
        self.number = number
    def fit(self, X, y=None):
        print("Transformer No.{}: fit X={}".format(self.number, X))
        return self
    def transform(self, X):
        print("Transformer No.{}: transform X={} => X+10={}".format(self.number, X, X+10))
        return X+10
class BarEstimator(BaseEstimator):
    def __init__(self, number):
        self.number = number
    def fit(self, X, y=None):
        print("Estimator No.{}: fit X={}".format(self.number, X))
        return self
    def predict(self, X):
        print("Estimator No.{}: predict X={} is...".format(self.number, X))
        return "a new result"
p1 = Pipeline(steps=[("Trans1", FooTransformer(1)),
                     ("Trans2", FooTransformer(2)),
                     ("Estmt1", BarEstimator(1))])
print(p1)
p2 = make_pipeline(FooTransformer(1), FooTransformer(2), BarEstimator(1))
print(p2)


5.2 线性回归实例
本节要岩石的实例,都是来自真实世界的数据。
1. 铁路客运量









2. 蓝鲸太阳鱼的尺寸


5.3 Logistic回归



常言道,“物以类聚,人以群分”。在人类看来,给这个世界进行“分类”是很重要的。阿猫阿狗本来不知道自己是哪个阵营的,我们非要划分出不同的门、纲、目、科、属、种,结果猫儿和狗儿发现对方“非我族类,的学科一一生物分类学。
必有异心”,于是破坏了和谐。生物学中就有专门干这个事情无独有偶,机器学习中也有“分类”―它是一种数学模型,本节将要介绍的Logistic
Regression即为其一,虽然它的名字中含有“Regression",但却不同于前面的的“回归”。

对于Logistic Regression(也称为Logit Regression)的中文译名,逻辑回归”。南京大学的周志华教授翻译为“对数几率回归”(详见周志华所著《机器学习》)。在就要开始选边站队了,读者站在哪一边?要么赞成周教授,要么反对,没有第三条道路可选。这-就是分类,通常资料里面翻译为通常称之为“二元分类”,而且是最简单的分类,
本书在以中文名称说明Logistic回归时,采用“对数几率回归”的译名,有时候也会直接Logistic,不进行翻译,这算是第三条道路了。
什么是Loglstic回归(对数几率回归)呢?稍安勿躁。要说清楚它,还需要从“线性回归”线性回归模型中的因变量(预测值)通常是连续的。在现实中,也会对连续值进行分类。比如依据大学录取分数把考生分为还有一种连续值,直观地看会有相对的集中现象。比如,在火车站,可以把人群的分布划为两类。上车和未上车。



1. 分析盈尾花的类型












2.再分析泰坦尼克号数据


2. 在分析泰坦尼克号数据







#Python##笔记##读书笔记#
全部评论

相关推荐

1 3 评论
分享
牛客网
牛客企业服务