目录html
虽然数据分析,数据挖掘,一说预测看起来高大上,可是实际上是有套路的,预测的代码大体都长下面这个样子算法
# 1.选择算法模型 model=new 算法模型() # 2.开始训练(传入训练集特征train_x和训练集结果train_y) model.fit(train_x, train_y) # 3.预测结果(传入测试集test_x) prediction=model.predic(测试集test_x) # 4.计算准确率(对比预测结果prediction和测试集真实结果test_y) 准确率=metrics.accuracy_score(prediction, test_y)
套路说明:dom
上面这些只是招式,其实内功都在模型上,那咱们怎么判断内功比较厉害呢?函数
模型就是内功,内功厉不厉害主要看下面这些指标,内功越强,预测的越准测试
准确率:accuracy
大部分状况,咱们均可以使用预测的数据和真实的数据,挨个比对来得到准确率
对于正例比例极低的状况,好比rest
信用卡欺诈 某些疾病的识别 恐怖分子的判断
这种获取的是占很小的一部分,就须要用精确率-召回率
来进行统计code
精确率(Precision):检索出来的正确条目数占检索出来的总条目数的多少,衡量的是查准率;
召回率(Recall):检索出的正确的条目占所有正确条目数的多少,衡量的是查全率
好比,推荐系统根据你的喜爱,推荐了10个商品,其中真正相关的是5个商品,在全部的商品库中,相关的商品一共有20个,则精确率 = 5/10,召回率 = 5/20orm
举个例子:
从一个大米和小麦混合的袋子里,抓一把大米,咱们确定但愿抓出来的大米越多越好(精确率高),而后咱们还但愿就是但愿一把抓出来的是全部的大米(召回率高),简单的说就是一个找的对,一个找的全。htm
关于模型的原理,能够查看从小白视角理解 <数据挖掘十大算法> blog
咱们已经有了数据,须要将数据分红两部分:训练集和测试集
好比能够8成用来训练,2成用来测试结果,sklearn提供了train_test_split stratify函数,能够很是方便的为咱们分割数据。
train_test_split 能够帮助咱们把数据集抽取一部分做为测试集,这样咱们就能够获得训练集和测试集。
参数
train_data:所要划分的样本特征集
train_target:须要划分的样本结果
test_size / train_size: 测试集/训练集的大小,若输入小数表示比例,若输入整数表示数据个数。
random_state:随机数种子,若是须要重复试验,能够指定非0值,将保证获得一组同样的随机数
shuffle:是否打乱数据的顺序,再划分,默认True。
stratify:none或者array/series类型的数据,表示按这列进行分层采样。
GridSearchCV是参数自动搜索模块,只须要传入须要要调优的参数及参数的取值范围,它会把全部的参数都执行一遍,而后找出最优的,本质是一种穷举法
from sklearn.model_selection import GridSearchCV # 初始化算法模型 model=算法模型() # 设置参数值取值范围 params={"n_estimators": range(1,11)} # 使用GriSearchCV找出最优参数 clf=GridSearchCV(estimator=model, param_grid=params) # 执行训练 clf.fit(iris.data, iris.target) # 获得最优分数和最优参数 print("最优分数: %.4lf" %clf.best_score_) print("最优参数:", clf.best_params_)
StandardScaler 能够采用Z-Score规范化数据,获得数据规范化为均值为 0,方差为1的正态分布
train_x = StandardScaler().fit_transform(train_x)
Python 有一种 Pipeline 管道机制。管道机制就是让咱们把每一步都按顺序列下来,从而建立 Pipeline 流水线做业。每一步都采用 (‘名称’, 步骤) 的方式来表示。
好比咱们能够把数据规范化->搜索最优的参数
合成一步,写到一个Pipline中
rf = RandomForestClassifier() parameters = {"randomforestclassifier__n_estimators": range(1,11)} iris = load_iris() pipeline = Pipeline([ ('scaler', StandardScaler()), ('randomforestclassifier', rf) ]) # 使用GridSearchCV进行参数调优 clf = GridSearchCV(estimator=pipeline, param_grid=parameters) # 对iris数据集进行分类 clf.fit(iris.data, iris.target) print("最优分数: %.4lf" %clf.best_score_) print("最优参数:", clf.best_params_)