0 课程
2 Python 用于机器学习的生态系统
2.1 python 语言
不必多说, 现在python 语言是机器学习的主流语言之一, 甚至可以去掉之一。 比R 流行, 比java简洁。
Python 版本。 2.7 3.5 任选。 如果新装, 不如直接上3.5, 有些软件已经开始不支持2.x的python了。
工作包呢, 主要是如下 scipy, pandas, numpy, matplotapi, scikitlearn。
环境的安装, 装一个anacond即可。 否则每个包需要单独来处理, 还有依赖的问题。 如果没有特别需求, 建议直接ananconda
Link:
3 Python 基础
3.1 python 语言
任何一门语言
- 变量的定义
- 流程的控制
- 数据结构 具体的- 略
3.2 numpy
略
3.3 pandas
推荐这个官方文档, 不错。
link
TODO
- series
- DataFrame
4 如何导入数据
如何通过numpy, pandas 来导入csv。 详见代码。
# Load CSV Using Python Standard Libraryimport csvimport numpyfilename = 'pima-indians-diabetes.data.csv'raw_data = open(filename, 'rt')reader = csv.reader(raw_data, delimiter=',', quoting=csv.QUOTE_NONE)x = list(reader)data = numpy.array(x).astype('float')print(data.shape)(768L, 9L)
# Load CSV using NumPyfrom numpy import loadtxtfilename = 'pima-indians-diabetes.data.csv'raw_data = open(filename, 'rt')data = loadtxt(raw_data, delimiter=",")print(data.shape)(768L, 9L)
# Load CSV using Pandasfrom pandas import read_csvfilename = 'pima-indians-diabetes.data.csv'names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)print(data.shape)(768, 9)
5 使用描述统计方法来理解你的数据
你必须理解你的数据,理解其内在的规律, 进而理解数据和结论之间的练习。 以下是你需要知道的。
- 看一下你的原始数据
- 清楚你数据的维度, 数量
- 审查一下数据的类型
- 在你数据集中根据分类来找到个体分布
- 使用描述统计来分析你的数据
- 使用关联来分析数据中的关联关系
- 审查每个特征的分布
5.1 粗略的看一下你的数据
看原始数据是不可以替代的,看原始数据可以让你洞悉到很多, 这是其他方式所不能带来的。 可以给你后期的处理带来很多的灵感。 你可以通过 datafram的 head 方法来看一下前面几行的样例。
# View first 20 rowsfrom pandas import read_csvfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)peek = data.head(20)print(peek)-- preg plas pres skin test mass pedi age class0 6 148 72 35 0 33.6 0.627 50 11 1 85 66 29 0 26.6 0.351 31 02 8 183 64 0 0 23.3 0.672 32 13 1 89 66 23 94 28.1 0.167 21 04 0 137 40 35 168 43.1 2.288 33 15 5 116 74 0 0 25.6 0.201 30 06 3 78 50 32 88 31.0 0.248 26 17 10 115 0 0 0 35.3 0.134 29 08 2 197 70 45 543 30.5 0.158 53 19 8 125 96 0 0 0.0 0.232 54 110 4 110 92 0 0 37.6 0.191 30 011 10 168 74 0 0 38.0 0.537 34 112 10 139 80 0 0 27.1 1.441 57 013 1 189 60 23 846 30.1 0.398 59 114 5 166 72 19 175 25.8 0.587 51 115 7 100 0 0 0 30.0 0.484 32 116 0 118 84 47 230 45.8 0.551 31 117 7 107 74 0 0 29.6 0.254 31 118 1 103 30 38 83 43.3 0.183 33 019 1 115 70 30 96 34.6 0.529 32 1
5.2 数据的维度
你必须很清楚数据的维度。 如果维度过多,训练时间会很长;太少则达不到训练的效果。 你可以用Dataframe的shape来看。
# Data Types for Each Attributefrom pandas import read_csvfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)types = data.dtypesprint(types)(768, 9)
5.3 每个参数的数据类型
Dataframe的dtypes 类型可以返回数据类型。
# Data Types for Each Attributefrom pandas import read_csv# Data Types for Each Attributefrom pandas import read_csvfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)types = data.dtypesprint(types)preg int64plas int64pres int64skin int64test int64mass float64pedi float64age int64class int64dtype: object
5.4 描述性统计
describe() 可以返回具体的结果, 对于每一列。
- 数量
- 平均值
- 标准差
- 25% 分位
- 50% 分位数
- 75% 分位数
- 最大值 很多时候你可以得到NA的数量和比例。
# Statistical Summaryfrom pandas import read_csvfrom pandas import set_optionfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)set_option('display.width', 100)set_option('precision', 3)description = data.describe()print(description) preg plas pres skin test mass pedi age classcount 768.000 768.000 768.000 768.000 768.000 768.000 768.000 768.000 768.000mean 3.845 120.895 69.105 20.536 79.799 31.993 0.472 33.241 0.349std 3.370 31.973 19.356 15.952 115.244 7.884 0.331 11.760 0.477min 0.000 0.000 0.000 0.000 0.000 0.000 0.078 21.000 0.00025% 1.000 99.000 62.000 0.000 0.000 27.300 0.244 24.000 0.00050% 3.000 117.000 72.000 23.000 30.500 32.000 0.372 29.000 0.00075% 6.000 140.250 80.000 32.000 127.250 36.600 0.626 41.000 1.000max 17.000 199.000 122.000 99.000 846.000 67.100 2.420 81.000 1.000preg int64plas int64pres int64skin int64test int64mass float64pedi float64age int64class int64dtype: object
5.5 类型分布 - 只是对于分类问题
其实就是对于类别这块做一个处理, 能够看到类型的一个分布状态, 通过表格的形式。
# Class Distributionfrom pandas import read_csvfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)class_counts = data.groupby('class').size()print(class_counts)class0 5001 268dtype: int64
5.6 属性的相关性
数据的相关性是说每两个数据类型之间的关联, 就是说如何一起改变或者不一起改变。 你可以通过dataframe 的corr 函数来看到结果。 常用的是皮尔森相关系数。 我的理解是一个协方差矩阵。 如果是正的话就是说变化的趋势相同, 如果负的那么变化的趋势相反。 数字越大变化就越一直。 那么就是说如果相关性越大。 后面有一个降维算法PCA 就是为了解决系数之间关联的问题, 经过处理可以转化成不相关的参数。 这是后话。
# Pairwise Pearson correlationsfrom pandas import read_csvfrom pandas import set_optionfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)set_option('display.width', 100)set_option('precision', 3)correlations = data.corr(method='pearson')print(correlations)----------- preg plas pres skin test mass pedi age classpreg 1.000 0.129 0.141 -0.082 -0.074 0.018 -0.034 0.544 0.222plas 0.129 1.000 0.153 0.057 0.331 0.221 0.137 0.264 0.467pres 0.141 0.153 1.000 0.207 0.089 0.282 0.041 0.240 0.065skin -0.082 0.057 0.207 1.000 0.437 0.393 0.184 -0.114 0.075test -0.074 0.331 0.089 0.437 1.000 0.198 0.185 -0.042 0.131mass 0.018 0.221 0.282 0.393 0.198 1.000 0.141 0.036 0.293pedi -0.034 0.137 0.041 0.184 0.185 0.141 1.000 0.034 0.174age 0.544 0.264 0.240 -0.114 -0.042 0.036 0.034 1.000 0.238class 0.222 0.467 0.065 0.075 0.131 0.293 0.174 0.238 1.000
5.7 单变量分布的倾斜度
倾斜度是说, 假设分布是高斯分布, 那么所有值的分布是偏向于哪个方向(最大, 最小值)。 知道这个倾斜可以帮助你后期的处理。 其实生活中很多的数据都是正态分布的, 也就是高斯分布的。 当然也有一些不是。
- 结果如果接近于0 就意味着倾斜度很小, 更符合正态分布。
# Skew for each attributefrom pandas import read_csvfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)skew = data.skew()print(skew)----------------preg 0.901674plas 0.173754pres -1.843608skin 0.109372test 2.272251mass -0.428982pedi 1.919911age 1.129597class 0.635017
5.8 小贴士
- 需要停下来仔细的思考数据
- 问问题, 看这些数据和结果的关系
- 写下来想法。
下一章 会用图形的办法来分析数据。
TODO 1 倾斜度落实到数据处理, 如何来操作, 具体的例子。