学习机器学习
1. 认识并读入数据
作为初学者,还是选择了比较经典的iris数据集,实现一个简单的分类方法。
数据集是从UCI官方找的,官方给的资料很详细,有关数据的特点,缺失值等等,大约是个iris.data文件。处理方法很简单,我们可以先强制吧他转成txt文件,然后再用强大的excel把txt文件导入,然后再保存成csv,这样我们就可以直接用pandas库中的read_csv直接读成DataFrame了
2.数据预处理
因为数据太经典了,也没啥错误数据,所以我忽略了数据处理。
(如果有需要,在这个时候我们需要数据归一化,和把数据格式处理一下
3. 熟悉数据并可视化
据我小小的经验来看,可视化并分析是非常麻烦的,如果数据复杂且属性非常多的话,我们很难去通过直观的趋势图简单的散点图把数据某些特点分析出来,我们需要借助很多数学方面,统计学的知识才行(皮尔森系数等等,因为我现在还不会,所以我就先简单的,复杂的东西,我以后回了在慢慢写。
df = pd.read_csv("Iris.csv")
df.PetalWidthCm.plot(kind = 'bar')# 类型是bar柱状图
4.选择评估方法
我接触到的评估方法大致分为三类:留出法,k折交叉验证法,自助法
其中数据量小的话我们可以选择自助法和k折交叉验证中的留一法。
直接贴代码
留出法
留出法一般是要执行多次的,我们从最外面打个循环就好了
X = df.drop("Species",axis = 1)//扔掉结果列
Y = df["Species"]
train_X , test_X, train_Y ,test_Y = train_test_split(
X, Y, test_size=0.3,random_state=0)//取百分之30为测试集
留出法保存数据
如果我们想把留出法截取的数据保存到本地的话,我们需要使用numpy包的np.save函数(多维数组的话是不能直接保存到csv的,类似于matlab的保存为.data文件。
a = []
b = []
for i in range(100):
train_X , test_X, train_Y ,test_Y = train_test_split(
X, Y, test_size=0.3,random_state=0)
save1 = np.hstack((np.array(train_X),np.array(train_Y).reshape(len(train_Y),1)))#这里要注意,我们必须把一维转二维(同维)才可以hstack合并
save2 = np.hstack((np.array(test_X),np.array(test_Y).reshape(len(test_Y),1)))
a.append(save1)
b.append(save2)
np.save(file="train.npy", arr=a)#保存到本地
np.save(file="test.npy",arr=b)
关于保存与读取用法
# 存储
np.save(file="data.npy", arr=a)
# 读取
b= np.load(file="data.npy")
k次k折交叉验证
最一般的是10次10折(不得不说sklearn真好用
from sklearn.model_selection import KFold# 一折的函数
from sklearn.model_selection import RepeatedKFold# 多折函数
kf = RepeatedKFold(n_splits = 10,n_repeats = 10,random_state = None)
for x,y in kf.split(df):
print(x," ",y)# 打个循环看看结果
自助法
随机数来弄
#自助法
import numpy as np
#通过产生的随机数获得抽取样本的序号
bootstrapping = []
for i in range(len(df)):
bootstrapping.append(np.floor(np.random.random()*len(df)))
#通过序号获得原始数据集中的数据
D_1 = []
D_1.append(df.loc[bootstrapping,:])#直接把列表中的列选出来
D_1