python机器学习基础教程-学习笔记(一)

了解 scikit-learn 及其用法是很重要的,但还有其他一些库也可以改善你的编程体验。 scikit-learn 是基于 NumPy 和 SciPy 科学计算库的。此外,我们还会用到 pandas 和 matplotlib。

  1. NumPy
    NumPy 是 Python 科学计算的基础包之一。它的功能包括多维数组、高级数学函数(比如 线性代数运算和傅里叶变换),以及伪随机数生成器。 在 scikit-learn 中,NumPy 数组是基本数据结构。scikit-learn 接受 NumPy 数组格式的数据。你用到的所有数据都必须转换成 NumPy 数组。NumPy 的核心功能是 ndarray 类, 即多维(n 维)数组。数组的所有元素必须是同一类型。
  2. SciPy
    SciPy 是 Python 中用于科学计算的函数集合。它具有线性代数高级程序、数学函数优化、信号处理、特殊数学函数和统计分布等多项功能。scikit-learn 利用 SciPy 中的函数集 合来实现算法。对我们来说,SciPy 中最重要的是 scipy.sparse:它可以给出稀疏矩阵(sparse matrice),稀疏矩阵是 scikit-learn 中数据的另一种表示方法。如果想保存一个大 部分元素都是 0 的二维数组,就可以使用稀疏矩阵。
  3. matplotlib
    matplotlib 是 Python 主要的科学绘图库,其功能为生成可发布的可视化内容,如折 线图、直方图、散点图等。将数据及各种分析可视化,可以让你产生深刻的理解,而我们将用 matplotlib 完成所有的可视化内容。
  4. pandas
    pandas 是用于处理和分析数据的 Python 库。它基于一种叫作 DataFrame 的数据结构,这种数据结构模仿了 R 语言中的DataFrame。简单来说,一个 pandas DataFrame 是一张表格,类似于 Excel 表格。pandas 中包含大量用于修改表格和操作表格的方法,尤其是可 以像 SQL 一样对表格进行查询和连接。NumPy 要求数组中的所有元素类型必须完全相 同,而 pandas 不是这样,每一列数据的类型可以互不相同(比如整型、日期、浮点数和字 符串)。pandas 的另一个强大之处在于,它可以从许多文件格式和数据库中提取数据,如 SQL、Excel 文件和逗号分隔值(CSV)文件。

1.7 鸢尾花分类
问题描述:假设有一名植物学爱好者对她发现的鸢尾花的品种很感兴趣。她收集了每朵鸢尾花的一些 测量数据:花瓣的长度和宽度以及花萼的长度和宽度,所有测量结果的单位都是厘米。她还有一些鸢尾花的测量数据,这些花之前已经被植物学专家鉴定为属于 setosa、 versicolor 或 virginica 三个品种之一。对于这些测量数据,她可以确定每朵鸢尾花所属的品种。我们假设这位植物学爱好者在野外只会遇到这三种鸢尾花。
我们的目标是构建一个机器学习模型,可以从这些已知品种的鸢尾花测量数据中进行学 习,从而能够预测新鸢尾花的品种。

本例中我们用到了鸢尾花(Iris)数据集,这是机器学习和统计学中一个经典的数据集。它包含在 scikit-learn 的 datasets 模块中。我们可以调用 load_iris 函数来加载数据。

# 从sklearn的datasets模块中导入load_iris函数
from sklearn.datasets import load_iris
iris_dataset = load_iris()	# 加载iris的数据
# load_iris 返回的 iris 对象是一个 Bunch 对象,与字典非常相似,里面包含键和值
print("Keys of iris_dataset: \n{}".format(iris_dataset.keys()))
# 查看花的品种
print("Target names: {}".format(iris_dataset['target_names']))
# 查看样本包含的特征
print("Feature names: \n{}".format(iris_dataset['feature_names']))

# scikit-learn 中的数据通常用大写的 X 表示,而标签用小写的 y 表示。我们用大写的 X 是因为数据是 一个二维数组(矩阵),用小写的 y 是因为目标是一个一维数组(向量)
# scikit-learn 中的 train_test_split 函数可以打乱数据集并进行拆分。
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)
print("X_train shape: {}".format(X_train.shape))
print("y_train shape: {}".format(y_train.shape))
print("X_test shape: {}".format(X_test.shape))
print("y_test shape: {}".format(y_test.shape))
# 使用 k近邻 算法来训练模型
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors = 1)
# 用knn方法训练数据
knn.fit(X_train, y_train)
# 我们将这朵花的测量数据转换为二维 NumPy 数组的一行,
# 这是因为 scikit-learn 的输入数据必须是二维数组
X_new = np.array([[5, 2.9, 1, 0.2]])
# 对新样本进行 预测
prediction = knn.predict(X_new)
print("Prediction: {}".format(prediction))
print("Predicted target name: {}".format(iris_dataset['target_names'][prediction])
# 模型评估
y_pred = knn.predict(X_test)
print("Test set predictions: \n{}".format(y_pred))
print("Test set score: {:.2f}".format(np.mean(y_pred == y_test)))
# 或者用knn对象的score方法来计算测试集的精度,保留小数点后两位
print("Test set score: {:.2f}".format(knn.score(X_test, y_test)))

关于format函数

#python中format函数用于字符串的格式化
# 1.通过关键字
print('{名字}今天{动作}'.format(名字='陈某某',动作='拍视频'))#通过关键字
grade = {'name' : '陈某某', 'fenshu': '59'}
print('{name}电工考了{fenshu}'.format(**grade))#通过关键字,可用字典当关键字传入值时,在字典前加**即可
# 2.通过位置
print('{1}今天{0}'.format('拍视频','陈某某'))#通过位置
print('{0}今天{1}'.format('陈某某','拍视频'))
# 3.填充和对齐^<>分别表示居中、左对齐、右对齐,后面带宽度
print('{:^14}'.format('陈某某'))
print('{:>14}'.format('陈某某'))
print('{:<14}'.format('陈某某'))
print('{:*<14}'.format('陈某某'))
print('{:&>14}'.format('陈某某'))
#填充和对齐^<>分别表示居中、左对齐、右对齐,后面带宽度
# 4.精度和类型f精度常和f一起使用
print('{:.1f}'.format(4.234324525254))
print('{:.4f}'.format(4.1))
# 5.进制转化,b o d x 分别表示二、八、十、十六进制
print('{:b}'.format(250))
print('{:o}'.format(250))
print('{:d}'.format(250))
print('{:x}'.format(250))
# 6.千分位分隔符,这种情况只针对与数字
print('{:,}'.format(100000000))
print('{:,}'.format(235445.234235))

关于np.mean()函数
np.mean(a,axis = None,dtype = None,out = None)
计算沿指定轴的算术平均值。返回数组元素的平均值。
参数:
a:数组。
axis:可选,计算平均值的轴,默认是计算所有元素的平均值,结果为一个标量;axis = 0按列计算平均值;axis = 1按行计算平均值。
dtype:可选,键入用于计算均值。对于整数输入,默认为float64; 对于浮点输入,它与输入dtype相同。
out:可选,用于放置结果的备用输出数组。默认是None; 如果提供,它必须具有与预期输出相同的形状。

代码示例:

>>> a = np.array([[1, 2], [3, 4]])
>>> np.mean(a)
2.5
>>> np.mean(a, axis=0)
array([ 2.,  3.])
>>> np.mean(a, axis=1)
array([ 1.5,  3.5])
>>> a = np.zeros((2, 512*512), dtype=np.float32)
>>> a[0, :] = 1.0
>>> a[1, :] = 0.1
>>> np.mean(a)
0.54999924
>>> np.mean(a, dtype=np.float64)
0.55000000074505806

书籍:Python机器学习基础教程

参考链接:
http://www.cnblogs.com/chunlaipiupiupiu/p/7978669.html
https://docs.scipy.org/doc/numpy/reference/generated/numpy.mean.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值