欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【ML笔记 1】sklearn和机器学习实战

程序员文章站 2024-03-18 16:43:52
...

@ 2018-01-24

1 机器学习基础知识

从过去的大量数据中“总结”出来“泛化规律”,用于新数据预测。

  • 3种不同类型的机器学习

    • 有监督学习,数据中已经存在标签值,算法通过这些带标签的样本(监督)习得“经验”,当新数据到来时,将习得的“经验”用于预测新数据的标签值;
    • 无监督学习,数据中没有所谓的“标签”(无监督),无监督算法需要从现有数据中发现数据之间的关系,例如聚类算法、关联规则等;
    • 强化学习,是一个与环境不断交互的过程。在环境中做一些动作,得到环境的当前的状态、奖励等;
      【ML笔记 1】sklearn和机器学习实战
  • 构建机器学习系统的一般流程

    • 数据预处理:归一化、缺失值填补、One-hot coding、降维、Sampling
    • 模型学习(建模):模型选择、交叉验证、性能指标、超参数
    • 评估:训练模型评价其好坏——准确率、召回率、F1、AUC……
    • 预测
      【ML笔记 1】sklearn和机器学习实战

2 sklearn入门宝典

一个大而全的Python机器学习库
1.sklearn入门页面
2.sklearn算法指南页面
3.算法API页面

3 sklearn建模实战

3.1 KNN

from sklearn import neighbors, datasets, preprocessing
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据
iris = datasets.load_iris()

# help(iris)
iris.feature_names

# iris.data # numpy的数组(本质上是一个矩阵)
train_X,train_y = iris.data[:,:2], iris.target

# 将数据集切分成训练集和测试集
X_train,X_test,y_train,y_test = train_test_split(train_X,train_y, random_state=100,test_size=0.2) 

# 数据预处理
scaler = preprocessing.StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler. transform(X_test)

# 用KNN预测,取最近的5个邻居(K=5)
# help(neighbors.KNeighborsClassifier)
knn = neighbors.KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train,y_train)
y_pred = knn.predict(X_test)

# 评估-准确率
# sum(y_test==y_pred)/float(y_pred.shape[0]) # 手算
accuracy_score(y_test,y_pred) # 0.90,模型在测试集上的测试结果

3.2 SVM

from sklearn import svm 
svc = svm.SVC(kernel='linear')
svc.fit(X_train,y_train)
svm_pred = svc.predict(X_test)
accuracy_score(y_test,svm_pred) #0.83, SVM 不一定有最好的效果:1)只有2个维度;2)kernel的选择(本实验中改成rbfaccuracy相同,基本可以确定是特征的问题)

3.3 网格搜索交叉验证

# 网格搜索交叉验证
from sklearn.grid_search import GridSearchCV
import numpy as np

# 参数列表:邻居范围1-5,距离评价指标:欧氏距离和曼哈顿距离
params = {"n_neighbors":np.arange(1,5),"metric":["euclidean","cityblock"]}
grid = GridSearchCV(estimator=knn, param_grid=params)
grid.fit(X_train,y_train)
print(grid.best_estimator_) # 最好的距离评价指标——欧氏距离
print(grid.best_score_) # 最好的得分——0.741,是将训练集默认切成3-fold做交叉验证,最后得分是交叉验证的平均结果