[置顶] scikit-learn的学习笔记

时间:2022-08-22 23:51:23

参考文章

数据归一化

缩放数据到0~1之间

# 读取的数据
X = dataset[:,0:7]
y = dataset[:,8]

from sklearn import preprocessing
normalized_X = preprocessing.normalize(X)
standardized_X = preprocessing.scale(X)

特征选择

此为树算法的实现

from sklearn import metrics
from sklearn.ensemble import ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(X, y)
print(model.feature_importances_)

使用算法

各类算法用代码的实现都大同小异,我们只需要调包即可

from sklearn import metrics

# 逻辑回归
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()

# 朴素贝叶斯
from sklearn.naive_bayes import GaussianNB
model = GaussianNB()

# K近邻
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier()

# 决策树
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()

# SVM,支持向量机
from sklearn.svm import SVC
model = SVC()

# 从这里开始进行预测
model.fit(X, y)
print(model)
expected = y
predicted = model.predict(X)
# 查看验证结果,本文末给出了解释
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))

选择某算法的理由

逻辑回归
可以给出数据所在类别的概率

朴素贝叶斯
还原训练样本数据的分布密度,适用多类别分类

K近邻
分类算法一部分,评估特征,在特征选择上也可以选择它

决策树
特征含有类别信息的分类或者回归问题,用于多分类情况

支持向量机
分类问题,如同逻辑回归问题,使用一对多的方法进行多类别的分类

优化算法参数

import numpy as np
from sklearn.linear_model import Ridge

# 进行正则参数选择
from sklearn.grid_search import GridSearchCV
alphas = np.array([1,0.1,0.01,0.001,0.0001,0])
model = Ridge()
grid = GridSearchCV(estimator=model, param_grid=dict(alpha=alphas))

# 随机在给定区间进行选参
from scipy.stats import uniform as sp_rand
from sklearn.grid_search import RandomizedSearchCV
param_grid = {'alpha': sp_rand()}
model = Ridge()
rsearch = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=100)


grid.fit(X, y)
print(grid)
print(grid.best_score_)
print(grid.best_estimator_.alpha)

此处参考文章

classification_report(expected, predicted)
输出结果类似一个表格,类似如下结果

           precision  recall   f1-score   support
0.0 0.79 0.89 0.84 500
1.0 0.74 0.55 0.63 268
avg / total 0.77 0.77 0.77 768
                相关,正类                  无关,负类
被检索到 true positives(TP正类判定为正类) false positives(FP负类判定为正类)

未被检索到 false negatives(FN正类判定为负类) true negatives(TN负类判定为负类)
  • accuracy:准确率,正确分类样本数/总样本数
  • preceision:精确率,P=TP/(TP+FP)
  • recall:召回率,R=TP/(TP+FN)
  • f1-score:F1值,F1=2PR/(P+R)=2TP/(2TP+FP+FN)
  • suport:出现次数
  • avg / total:根据support算的加权数

confusion_matrix(expected, predicted)

输出一个矩阵,类似如下结构,横轴表示实际值、纵轴表示预测值

[[447 53] 
[120 148]]