python数据挖掘入门与实战——学习笔记(第3、4章)

chapter 3 决策树预测获胜球队

pandas加载数据集

import pandas as pd
dataset = pd.read_csv('filepath+filename')


数据清洗,可在读入时清洗

dataset = pd.read_csv('filename', parse_date=['Date'], skiprows = [0, ])

创建默认字典(value为int类型)

from collections import defaultdict
won_last = defaultdict(int)

sklearn实现了CART(分类回归树),并将其作为生成决策树的默认算法,它支持连续型特征和类别型特征。

决策树防止过拟合:

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')

sklearn 所实现的决策树算法要求对类别型数据进行处理。用LabelEncoder转换器就能把字符串类型的球队名称转化为整型。

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编码后的数据集进行分类和交叉验证。

np.vstack():按行垂直排列


使用随机森林

一棵决策树能学到很复杂的规则,然而, 很可能会导致过拟合问题。解决方法之一就是调整决策树算法,限制它所学到的规则的数量。例如,把决策树的深度限制在三层,等等。使用这种折中方案得到的决策树泛化能力强,但整体表现稍弱。

为了弥补上述方法的不足,我们可创建多棵决策树,用它们分别进行预测,在根据投票情况选择最终预测结果。这正是随机森林的工作原理。

随机森林是一种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')

使用GridSearchCV类搜索最佳参数

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里面并没有这个函数,有知道原委的朋友,欢迎留言告知。


chapter 4 用亲和性分析方法推荐电影

所谓亲和性分析方法,我个人理解就是频繁项集挖掘和推荐。

亲和性分析用来找出两个对象共同出现的情况。亲和性分析所用的数据通常类似于交易信息的数据。

时间戳数据的解析

df['Datetime'] = pd.to_datetime(df['Datetime'])

稀疏数据格式

若数据集中60%或以上的数据为0,就应该考虑使用稀疏矩阵,从而节省不少空间。

由于本章介绍的Apriori算法在效率等方面没有FP-Growth算法好,而FP-Growth算法我已在之前的博文中介绍过,因此本章内容记录较为简略。


你可能感兴趣的:(Python,机器学习与数据挖掘)