numpy、pandas
numpy和pandas是python中做数据处理必不可少的工具.。
收到数据集之后,首先需要观察数据集的特点,然后选择不同的方法和模型来求解,达到想要的效果。
matplotlib
matplotlib是python中的作图工具,貌似调用了matlab中的作图功能。
scatter
scatter画出来是散点图,散点图可以展示2D,3D数据,但是维数更高的数据展示效果就没有太好了。
numpy、pandas、matplotlib实例
以iris为例
导入需要的包
from sklearn.datasets import load_iris
import pandas as pd
import matplotlib.pyplot as plt
from pandas import DataFrame
取出需要的数据集,这里iris_x的合适是narray格式,也就是每一行是一个数组,数组之间没有都好分割
iris = load_iris()
iris_X = iris.data #x有4个属性,共有150个样本点
iris_y = iris.target #y的取值有3个,分别是0,1,2
转成pandas里DataFrame格式,方便数据选取,数据合并
df_X = DataFrame(iris_X, columns=['x1','x2','x3','x4'])
df_y = DataFrame(iris_y, columns=['y'])
数据合并
df = pd.concat([df_X,df_y],axis=1)
数据选取
df0 = df[df.y==0]
df1 = df[df.y==1]
df2 = df[df.y==2]
可视化观察数据之间的关系
plt.scatter(df0.x1, df0.x2, color="r")
plt.scatter(df1.x1, df1.x2, color="g")
plt.scatter(df2.x1, df2.x2, color="b")
plt.xlabel("x1")
plt.ylabel("x2")
plt.legend(labels = ["y0","y1","y2"],loc="best")
plt.show()
这张图片展示的是iris中第一个属性和第二个属性与样本分类的关系,有图片可以看出
y
1
,
y
2
y_1,y_2
y1,y2不是线性可分的,因此不能用SVM,若想用SVM,需要用核函数,变换到线性可分的空间上,才可以用SVM。
这张图片表示的是第三个属性和第四个属性与分类的关系,观察可知,分类0与分类1,2是线性可分的。分类0的数据集中在
[
0
,
2
]
×
[
0
,
0.7
]
[0,2]\times[0,0.7]
[0,2]×[0,0.7]的范围内,分类1的数据集中在
[
3
,
7.5
]
×
[
0.8
,
3
]
[3,7.5]\times[0.8,3]
[3,7.5]×[0.8,3]的范围内,考虑是否可以将数据缩放到相同的范围内,即是否可以batch normalization?对于
x
1
,
x
2
x_1,x_2
x1,x2做同样的考虑。
观察到可改进的地方
标准化normalization
可以考虑normalization,将数据集合的4个属性,缩放到均值为0,方差为1的范围内。
降维可视化pca
可以将4个属性降维到2维,可视化,观察可用的方法。如下图所示,是降维到2维的可视化结果。代码见如下链接
[link]https://github.com/Wenshiting/learn-machine-learning/new/master