pandas加载数据集
import pandas as pd
dataset = pd.read_csv('filepath+filename')
dataset = pd.read_csv('filename', parse_date=['Date'], skiprows = [0, ])
from collections import defaultdict
won_last = defaultdict(int)
决策树防止过拟合:
1、退出准则:使用一下两个变量达到目的
min_samples_split:指定创建一个新节点至少需要的个体数量
min_samples_leaf:指定为了保留节点,每个节点至少应该包含的个体数量
第一个参数控制着决策节点的创建,第二个参数决定着决策节点能否被保留。
2、后剪枝
使用决策树
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(random_state = 14)
仍然使用交叉验证法求平均正确率
scores = cross_val_score(clf, x, y, cv = 10, scoring = 'accuracy')
from sklearn.preprocessing import LabelEncoder
encoding = LabelEncoder()
encoding.fit([array-like data])#编码
home_team = encoding.transform([array-like data])#映射
决策树可以用这些特征值(整型)进行训练,但DecisionTreeClassifier仍把他们当做连续特征处理,进行运算。然而这些运算是毫无意义的,他们之间只有相同和不同,没有中间状态。为了消除这种和实际不一致的情况,可以使用OneHotEncoder转换器把这些整数转换为二进制数字。这样数据集会变大。
from sklearn.preprocessing import OneHotEncoder
onehot = OneHotEncoder()
home_team_expanded = onehot.fit_transform(home_team).todense()
然后将one-hot编码后的数据集进行分类和交叉验证。
使用随机森林
一棵决策树能学到很复杂的规则,然而, 很可能会导致过拟合问题。解决方法之一就是调整决策树算法,限制它所学到的规则的数量。例如,把决策树的深度限制在三层,等等。使用这种折中方案得到的决策树泛化能力强,但整体表现稍弱。
为了弥补上述方法的不足,我们可创建多棵决策树,用它们分别进行预测,在根据投票情况选择最终预测结果。这正是随机森林的工作原理。
随机森林是一种bagging方法,它采用有放回采样,在创建每棵树之前,都随机的从样本集中选出一部分作为训练集。此为第一层“随机”的含义。随机森林的第二层“随机”含义是指,在总的特征空间中,随机选取部分特征作为决策依据。然后使用随机从数据集中选取的数据和随机选取的特征,创建多棵决策树。This is random forest!
随机森林算法的参数
sklearn中的RandomForestClassifier就是对随机森林算法的实现。因为它使用了DecisionTreeClassifier的大量实例,所以它俩的很多参数是一致的。
当然,集成过程中还引入了一些新参数。
n_estimators:决策树的数量。值越大,时间越长,正确率(可能)也越高。
oob-score:若设置为真,测试时将不使用训练模型时用过的数据。
n_jobs:采用并行计算方法训练决策树时所用到的内核数量。
使用随机森林算法
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state = 14)
scores = cross_val_score(clf, x, y, cv = 10, scoring = 'accuracy')
from sklearn.model_selection import GridSearchCV
clf = RandomForestClassifier(random_state = 14)
parameter_space = {
"max_features": [2, 10, 'auto'],
"n_estimators": [100,],
"criterion": ["gini", "entropy"],
"min_samples_leaf": [2, 4, 6],
}
grid = GridSearchCV(clf, parameter_space)
grid.fit(x, y)
print(grid.best_estimator_)
书中说可用pandas提供的函数feature_creator创建特征,可我试了,pandas里面并没有这个函数,有知道原委的朋友,欢迎留言告知。
所谓亲和性分析方法,我个人理解就是频繁项集挖掘和推荐。
亲和性分析用来找出两个对象共同出现的情况。亲和性分析所用的数据通常类似于交易信息的数据。
时间戳数据的解析
df['Datetime'] = pd.to_datetime(df['Datetime'])
若数据集中60%或以上的数据为0,就应该考虑使用稀疏矩阵,从而节省不少空间。
由于本章介绍的Apriori算法在效率等方面没有FP-Growth算法好,而FP-Growth算法我已在之前的博文中介绍过,因此本章内容记录较为简略。