数据归一化
缩放数据到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]]