scikit-learn的学习笔记

参考文章

数据归一化

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

保存模型

# 加载自带数据集
from sklearn import datasets
data_set = datasets.load_iris()
# 数据集分为两部分
data = data_set.data
target = data_Set.target

# 保存训练好的模型
from sklearn.externals import joblib
# 假设clf为已经预测好的模型
# 保存模型名为model.pkl
joblib.dump(clf, 'model.pkl')

# 加载训练过的模型
clf1 = joblib.load('model.pkl')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值