python 扩展库 sklearn

基础

sklearn.feature_extraction

.DictVectorizer(sparse=True) 字典形式样本的特征化处理

将字典形式的样本数据进行特征化变化,其中样本字典必须为key为特征,value为特征值的形式。如果某特征的特征值包含string字符型数据,则该特征全部字符型数据将被转换为one-hot编码,该特征的数值型部分数据将单列为数值变量。sparse参数默认为True,即特征化后默认为稀疏矩阵形式。模型支持 .get_feature_names()方法和 .feature_names_属性,均可返回全部特征名称,其中经one-hot编码的特征名称将以“特征=值”的形式命名。

>>> tt=[{'a':'a1','b':'b1','c':10},{'a':'a2','b':'b2','c':20},{'a':'a3','b':'b3','c':30}]
>>> td=DictVectorizer(sparse=False)
>>> ts=td.fit_transform(tt)
>>> ts
array([[ 1.,  0.,  0.,  1.,  0.,  0., 10.],
       [ 0.,  1.,  0.,  0.,  1.,  0., 20.],
       [ 0.,  0.,  1.,  0.,  0.,  1., 30.]])
>>> td.get_feature_names()
>>> ['a=a1', 'a=a2', 'a=a3', 'b=b1', 'b=b2', 'b=b3', 'c']
>>> tt=[{'a':'a1','b':'b1','c':10},{'a':'a2','b':'b2','c':20},{'a':'a3','b':'b3','c':30,'d':40}]
>>> td=DictVectorizer(sparse=False)
>>> ts=td.fit_transform(tt)
>>> ts
array([[ 1.,  0.,  0.,  1.,  0.,  0., 10.,  0.],
       [ 0.,  1.,  0.,  0.,  1.,  0., 20.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  1., 30., 40.]])
>>> tt=[{'a':'a1','b':'b1','c':10},{'a':'a2','b':'b2','c':20},{'a':'a3','b':'b3','c':'haha','d':'what'}]
>>> td=DictVectorizer(sparse=False)
>>> ts=td.fit_transform(tt)
>>> ts
array([[ 1.,  0.,  0.,  1.,  0.,  0., 10.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  1.,  0., 20.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  1.,  0.,  1.,  1.]])
>>> td.get_feature_names()
['a=a1', 'a=a2', 'a=a3', 'b=b1', 'b=b2', 'b=b3', 'c', 'c=haha', 'd=what']

可见对于非对称的样本数据,无论字符型还是数值型,缺失特征的样本均默认为0

sklearn.model_selection

.train_test_split(arrays_to_be_splitted,test_size=0.25,train_size=None,shuffle=True,stratify=None) 将输入数据集随机分裂为训练集和测试集

可输入多个数据集,每个数据集都将依次分裂为训练集和测试集,shuffle参数指定是否在分裂前打乱每个数据集的样本排列顺序,stratify参数确定是否分裂集是否考虑分层。

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,shuffle=True)

sklearn.metrics

.accuracy_score(y_true,y_pred,normalize=True) 预测准确率

这个用法很显然,返回的为scalar数值,normalize默认返回准确率,如为False则返回准确的数量。注意,准确率的定义为正确预测的个数在总数中的比例

.confusion_matrix(y_true,y_pred,labels=None) 混淆矩阵

用法比较显然,注意输出。输出为一个二维矩阵CCCi,jC_{i,j}为标签实际为ii,但模型预测为jj的样本的数量。labels参数输入一个标签列表,这样矩阵输出的行顺序将与此列表的标签顺序相同

>>> y_true = ["cat", "ant", "cat", "cat", "ant", "bird"]
>>> y_pred = ["ant", "ant", "cat", "cat", "ant", "cat"]
>>> confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
       [0, 0, 1],
       [1, 0, 2]], dtype=int64)
>>> confusion_matrix(y_true, y_pred, labels=["bird", "ant", "cat"])
array([[0, 0, 1],
       [0, 2, 0],
       [0, 1, 2]], dtype=int64)

sklearn.ensemble

.RandomForestClassifier((n_estimators=100,criterion=’gini’,max_depth=None,min_samples_split=2,min_samples_leaf=1,max_features=’auto’,min_impurity_decrease=0.0) 随机森林分类器

详细算法描述请见随机森林算法。n_estimators参数定义森林中树的数量;criterion参数指定分裂指标算法,可选ginientropy。max_depth参数定义树的最高分裂层数,默认无限制。min_samples_split定义每一各节点得以进行分裂的最少样本数。min_samples_leaf定义一个节点可以成为叶节点的最少样本数。max_features定义森林的每棵树所抽选的最大的特征数量,具体请见官方文档max_feature参数描述。min_impurity_decrease定义树每次分支的最小的纯度增益水平。注意分类器分类器输出包含一个feature_importance属性,以一维数组形式列出各特征的重要性程度,所有特征的重要性相加为1,数字越大说明特征越重要。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章