机器学习实战

各种处理

机器学习中拿到手的数据应该经过人为的处理

预处理

我们学习机器学习最先应该做的是获取数据,机器学习的数据我们一般从UCI这个网站获取。

对于使用pandas读取的数据集,我们想要快速获取数据集的简单描述,是关于每一行,每个属性的缺失值。通常我们使用info()函数

X.info()#X是目标数据集

对于分类过的数据集,我们也可以读取类别一栏然后通过函数value_counts()来查看有多少个属性每个属性有多少样本。

X[class].value_counts()

当我们想获得每个属性的最大值,方差分位数等等,我们一般使用describe()方法来显示。

X.describe()

文本类型转换数据:OrdinalEncoder()将文本数据转换为数字类别

from sklearn.preprocessing import OrdinalEncoder
ordinal_encoder=OrdinalEncoder()
X_ordinal_encoder=ordinal_encoder.fit_transform(X["class"])

还有一种方法就是 LabelEncoder()

from sklearn.preprocessing import LabelEncoder
class_le=LabelEncoder()
data["class"]=class_le.fit_transform(data['class'].values)

数据缺失

通常我们拿到手的数据在经过上述处理后,如果我们发现了在某些样本中发现有缺失的数值,那么我们需要对它进行处理:

1:放弃这些相应样本   方法:dropna()

dropna([axis=0],[how='any'],[thresh='None'],[subset='None'],[inplace='False'])

axis:axis=0/1,表示按行/列删除

how:how=all/any,表示该行 全部缺失 或者 >1 删除该行

thresh:当该行缺失值数目达到n是删除该行

subset:选择数据的某一部分

2:放弃相应区域  方法:drop()

drop(label=[n],axis=0,)

label:就是要删除的索引或者列标签;可以写成df.drop(labels=[1,2],axis=0,inplace=ture),也可以省略不写label,即df.drop([1,2],axis=0,inplace=ture),axis也可以省略

axis:用来设置按行删除还是按列删除,有两个值可以设置,当axis=0时,代表是按照行删除;当axis=1时,代表按照列删除。

3:把缺失值设置为某个值(0,平均数/中位数)   方法:fillna()

median = X['属性'].median()
X['属性'].fillna(median,inplace=Trye)

median:填充的数值

inplace:是否改变原数据,当为True是原属数据的内存也会改变,上面两个函数也有这个属性

训练集/测试机的创建

我们对原始数据进行训练集和测试机的划分,来评估模型的泛化性能以选择最好的模型。

 纯随机的抽样:通常再划分中我们可以使用函数train_test_split(),调用格式为:

from sklearn.model_selection import train_test_split
train_set,test_set=train_test_split(X,test_size=0.2,random_state=42)
#X是原始数据,test_size测试集的大小,random_state=42设置随机数种子保证每次训练集相同

通常对于数据量足够大样本分布足够均匀时或许好用。但是有时可能会出现样本有较大偏差的情况。

  分层抽样:可以保证训练集的分布和原始数据的分布相同。

from sklearn.model_selection import StratifiedShuffleSplit
split = StratifiedShuffleSplit(n_splits=1,test_size=0.2,random_state=42)
for train_index,test_index in split.split(X,Y)
    train_set=[train_index]
    test_set=X[test_index]
#X是原始数据的属性集,y是数据的类别

 模型评估

使用交叉验证法来评估模型,使用到cross_val_score()

cross=cross_val_score(model,x,y,soring,cv)

model:估计器,也就是模型
x, y:数据,标签值
soring:调用的方法
cv:交叉验证生成器或可迭代的次数

模型调参

通常我们的模型中会出现多个参数,参数的改变会直接影响模型的泛化性能,因此当模型的泛化性能不能使人满意是我们可以进行参数调节。

推荐另一个介绍:地址

你可能感兴趣的:(机器学习,python,人工智能)