机器学习工具模板

本章案例均使用Kaggle-Titanic-train数据集,案例所使用的data代表原始数据集,具体如下:
在这里插入图片描述
其中,第二列“Survlved”是标签,其余列是特征
特征“Age”只有714行有数据,其余行为空值;
特征“Cabin”只有204行有数据,其余行为空值;
特征“Embarked”只有889行有数据,其余行为空值

该数据集data总共有891行数据、11个特征、1个标签

删除某列或某行数据

用法:DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False)

参数说明:
labels 就是要删除的行列的名字,用列表给定
axis 默认为0,指删除行,因此删除columns时要指定axis=1;
index 直接指定要删除的行
columns 直接指定要删除的列
inplace=False,默认该删除操作不改变原数据,而是返回一个执行删除操作后的新dataframe;
inplace=True,则会直接在原数据上进行删除操作,删除后无法返回。

比如,删除“Cabin”和“Name”这两列的数据:

new_data = data.drop(labels = ["Cabin","Name"], axis = 1, inplace = False)

在这里插入图片描述

可以看到,删除了这两列的数据

再比如,删除前五行的数据:

new_data = data.drop(labels = [0,1,2,3,4], axis = 0, inplace = False)

在这里插入图片描述
可以看到,删除了前五行数据。

删除空值所在的行或列

dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)

参数:

axis:轴。0或’index’,表示按行删除;1或’columns’,表示按列删除。

how:筛选方式。‘any’,表示该行/列只要有一个以上的空值,就删除该行/列;‘all’,表示该行/列全部都为空值,就删除该行/列。

thresh:非空元素最低数量。int型,默认为None。如果该行/列中,非空元素数量小于这个值,就删除该行/列。

subset:子集。列表,元素为行或者列的索引。如果axis=0或者‘index’,subset中元素为列的索引;如果axis=1或者‘column’,subset中元素为行的索引。由subset限制的子区域,是判断是否删除该行/列的条件判断区域。

inplace:是否原地替换。布尔值,默认为False。如果为True,则在原DataFrame上进行操作,返回值为None。

删除空值所在的行

new_data = data.dropna(axis = 0, inplace = False)

在这里插入图片描述

删除空值所在的列:

new_data = data.dropna(axis = 1, inplace = False)

在这里插入图片描述

填补缺失值

class sklearn.impute.SimpleImputer(*, missing_values=nan, strategy=‘mean’, fill_value=None, verbose=0, copy=True, add_indicator=False)

参数含义

missing_values:int, float, str, (默认)np.nan或是None, 即缺失值是什么。

strategy:空值填充的策略,共四种选择(默认)mean、median、most_frequent、constant。mean表示该列的缺失值由该列的均值填充。median为中位数,most_frequent为众数。constant表示将空值填充为自定义的值,但这个自定义的值要通过fill_value来定义。

fill_value:str或数值,默认为Zone。当strategy == “constant"时,fill_value被用来替换所有出现的缺失值(missing_values)。fill_value为Zone,当处理的是数值数据时,缺失值(missing_values)会替换为0,对于字符串或对象数据类型则替换为"missing_value” 这一字符串。

verbose:int,(默认)0,控制imputer的冗长。

copy:boolean,(默认)True,表示对数据的副本进行处理,False对数据原地修改。

add_indicator:boolean,(默认)False,True则会在数据后面加入n列由0和1构成的同样大小的数据,0表示所在位置非缺失值,1表示所在位置为缺失值。

比如,使用中位数填补“Age”列的空值:

Age = data.loc[:,"Age"].values.reshape(-1,1) #sklearn当中特征矩阵必须是二维

from sklearn.impute import SimpleImputer
imp_median = SimpleImputer(strategy="median") #用中位数填补

imp_median = imp_median.fit_transform(Age)

#在这里我们使用中位数填补Age
data.loc[:,"Age"] = imp_median
data.info()

在这里插入图片描述

数据类型转化为int64

把data中Embarked的数据类型全部转化为int64:

# 1、数组转化成列表
Embarked_labels = data["Embarked"].unique().tolist()
# 2、把列表中的值转化成对应的索引
data["Embarked"] = data["Embarked"].apply(lambda x : Embarked_labels.index(x))
data.head()

在这里插入图片描述

分割训练集测试集(train_test_split)

sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)

将数组或矩阵拆分为训练集和测试集

返回值:X_train,X_test,y_train,y_test

在这里插入图片描述

示例:

# 首先,把data分成特征和标签两部分
x = data.loc[:,data.columns != "Survived"]
y = data.loc[:,data.columns == "Survived"]

# 其次,划分训练集和测试集
from sklearn.model_selection import train_test_split
Xtrain, Xtest, Ytrain, Ytest = train_test_split(x,y,test_size = 0.3)

在这里插入图片描述

乱序索引重排序

Xtrain,Xtest,Ytrain,Ytest是上一节分割训练集和测试集后的结果

发现Xtrain,Xtest,Ytrain,Ytest的索引乱序了
在这里插入图片描述

于是,纠正索引:

# 纠正索引,避免错乱
for i in [Xtrain,Xtest,Ytrain,Ytest]:
    i.index = range(i.shape[0])
Xtrain

在这里插入图片描述

交叉验证

cross_val_score(estimator, X, y, scoring=None, cv=None, n_jobs=None, verbose=0, fit_params=None, pre_dispatch=“2*n_jobs”)
在这里插入图片描述
常见的scoring取值:
在这里插入图片描述
例子:

from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(random_state = 30)
clf = clf.fit(Xtrain,Ytrain)

from sklearn.model_selection import cross_val_score
score = cross_val_score(clf,Xtrain,Ytrain,cv=10).mean()
score

网格搜索

以决策树为例:

# 网格搜索:能够帮助我们同时调整多个参数的技术,枚举技术

# 一串参数和这些参数对应的我们希望网格搜索来搜索的参数的取值范围
from sklearn.model_selection import GridSearchCV
parameters = {"criterion" : ("gini", "entropy")
              ,"splitter" : ("best", "random")
              ,"max_depth" : [*range(1,11)]
             }
clf = DecisionTreeClassifier(random_state = 30)
GS = GridSearchCV(clf, parameters, cv = 10)
GS = GS.fit(Xtrain,Ytrain)

# 网格搜索后查数据:
# GS.best_params_ :从我们输入的参数和参数取值的列表中返回最佳组合
# GS.best_socre_ 网格搜索后的模型的评判标准

学习曲线

import matplotlib.pyplot as plt
test = []
for i in range(10):
    clf = tree.DecisionTreeClassifier(max_depth = i+1
                                      ,criterion = "entropy"
                                      ,random_state = 24
                                      ,splitter = "random"
                                     )
    clf = clf.fit(Xtrain,Ytrain)
    # 也可使用交叉验证
    score = clf.score(Xtest,Ytest)
    test.append(score)
plt.plot(range(1,11),test,color = "red", label = "max_depth")
plt.legend()
plt.show()
  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值