numpy和pandas是python中做数据处理必不可少的工具.。
收到数据集之后,首先需要观察数据集的特点,然后选择不同的方法和模型来求解,达到想要的效果。
matplotlib是python中的作图工具,貌似调用了matlab中的作图功能。
scatter画出来是散点图,散点图可以展示2D,3D数据,但是维数更高的数据展示效果就没有太好了。
以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,将数据集合的4个属性,缩放到均值为0,方差为1的范围内。
可以将4个属性降维到2维,可视化,观察可用的方法。如下图所示,是降维到2维的可视化结果。代码见如下链接
[link]https://github.com/Wenshiting/learn-machine-learning/new/master