【机器学习】学习第一天笔记

从今天开始正式学习机器学习了,每天做个学习笔记,记录自己的成长
注:学习笔记的含义就是,很多东西从外面都能轻易百度到,而且会显得很乱,所以主要是给我自己看的
书:《Python机器学习基础教程》,Andreas C.Muller
视频:《吴恩达机器学习》,来源:网易公开课
计划每天学习时间:书——每天20页,视频——每天2-4课,预计两个月内完成机器学习的基础学习
放一张别人的学习经验,深表认同(之前看了1/3本统计学,看到后面没劲了)
在这里插入图片描述
学习第一天笔记:
1、我用Python来学习机器学习,因为它是我学习的第一门主流编程;
2、Python机器学习需要几个包,包括:
1)、scikit-learn:包含了主流的机器学习算法;
2)、NumPy:数学计算的基础包,功能包括多维数组、高级数学函数(比如线性代数运算和傅里叶变换),以及伪随机数生成器。在scikit-learn里,接受的数据格式都是NumPy的数组,核心功能是ndarray类,也就是多维(n维)数组。比如

import numpy as np
x = np.array([1, 2, 3], [4, 5, 6])
print("x:/n{}".format(x))

输入就是

x:
[[1 2 3]
[4 5 6]]

3)、Scipy:用于科学计算的函数集合;其中最重要的是scipy.sparse:它可以给出稀疏矩阵(比如想保存一个大部分元素都是0的二维数组)
4)、matplotlib:科学绘图库,生成可视化内容,如折线图、直方图、散点图。
注:在非Jupyter Notebook(如Pycharm)中,需要使用plt.show()才能显示图片
5)、pandas:用于处理和分析数据的库,基于一种叫做DateFrame的数据结构,是一张表格,类似于Excel表格,并有大量方法可以用来修改表格和操作表格,还可以像SQL一样对表格进行查询和连接。
NumPy和pandas的区别:前者要求数组中的所有元素类型必须完全相同,而后者可以互不相同(想想Excel表格里,每一列的类型都可以不一样,比如整数、日期、浮点数和字符串);
另外pandas还可以从许多文件格式和数据库中提取数据,如SQL、Excel和CSV等。
6)、mglearn:主要是用来快速美化绘图,在《Python机器学习基础教程》中的一些案例图片都在mglearn里用一句代码给完成了(应该是编者提前放到了mglearn里)
7)、在机器学习时,建议先默认导入以下库:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import mglearn

3、机器学习,主要分为监督学习(supervised learning)和非监督学习(unsupervised learning)。
1)、监督学习按照我的理解,就是我手头上有一批数据,而且知道需要的结果是什么,让计算机按照我的经验来获得结果;非监督学习就是不知道结果是什么,让计算机自己研究出结果;
2)、监督学习里主要有两大类:分类(classification)和回归(regression);非监督学习主要有聚类(clustering)和降维(dimensionality reduction);
3)、分类:结果是非连续性的,比如预测明天是晴天或阴天或下雨天;
回归:结果是连续性的数值,比如预测明天的温度是多少度;
聚类:物以类聚,人以群分,比如根据温度把一年365天分成不同的季节,春夏秋冬;
降维:简单说就是把获得的数据内不需要的部分去除掉或者分离开,只保留我们想要的,比如图像、声音分离;

4、在sklearn里,经常有一行代码和以下类似:

print("Shape of data: {}".format(iris_dataset['data].shape))

输出结果是:Shape of data: (150, 4)
意思就是这个数组有150个测量数据,4个特征。所以shape的作用就是查看矩阵或者数组的维数(numpy格式)

5、机器学习中,对算法的适用性有一个评价标准:泛化能力(generalize),意思就是在新的数据上能否预测成功;

6、一般在做机器学习前,我们需要把手上的数据分为两部分:训练数据(training data)和测试数据(test data)
scikit-learn中的train_test_split函数可以打乱数据集并进行拆分。
注1:scikit-learn中的数据通常用大写的X表示,标签用小写的y表示,X是因为数据是一个二维数组(矩阵),y是因为目标是一个一维数组(向量);
注2:一般把数据75%和25%拆分,75%是训练集,25%是测试集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)

random_state参数指定了随机数生成器的种子。这样函数输出就是固定不变的,所以这行代码的输出始终相同。

7、可视化方法之一是绘制散点图(scatter plot)(2-3个特征点),多余三个特征点的话就要用散点图矩阵(pair plot)。pandas有一个绘制散点图矩阵的函数,叫做scatter_matrix

#利用X_train中的数据创建DateFrame
#利用iris_dataset.feature_names中的字符串对数据列进行标记
iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)
#利用DataFrame创建散点图矩阵,按y_train着色
grr = pd.plotting.scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o', hist_kwds={'bins': 20}, s=60, alpha=.8, cmap=mglearn.cm3)

8、K近邻算法(KNeighbors Classifier),最简单的分类算法,简称“knn算法”。K的含义是,训练集中与新数据点最近的任意k个邻居(如3个、5个),用这些邻居中数量最多的类别做出预测。
K近邻分类算法在neighbors模块的KNeighborsClassifier类中实现:

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)

1)、对于KNeighborsClassifier来说,不存在测试集,都是训练集;
2)、fit方法返回的是knn对象本身并作原处修改。简单来说,就是申明了把X_train和y_train调用了knn算法,其它算法调用的方法同理

9、一般通过精度(accuracy)来衡量模型的优劣,在鸢尾花的模型中,精度就是品种预测正确的花所占的比例。精度的测算有2种方法,推荐用第二种

#方法一:
y_pred = knn.predict(X_test)
print("Test set score: {:.2f}".format(np.mean(y_pred == y_test)))

#方法二:
print("Test set score: {:.2f}".format(knn.score(X_test, y_test)))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值