Python机器学习笔记一

1.python 中的[::-1]

b = a[i:j:s]这种格式呢,i,j与上面的一样,但s表示步进,缺省为1.
所以a[i:j:1]相当于a[i:j]
当s<0时,i缺省时,默认为-1. j缺省时,默认为-len(a)-1
所以a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍。

参考链接:https://www.cnblogs.com/mxh1099/p/5804064.html


2.python enumerate用法

  • enumerate在字典上是枚举、列举的意思
  • 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
  • enumerate多用于在for循环中得到计数
  • enumerate()使用

    • 如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:
    list1 = ["这", "是", "一个", "测试"]
    for i in range (len(list1)):
        print i ,list1[i]
    • 上述方法有些累赘,利用enumerate()会更加直接和优美:
    list1 = ["这", "是", "一个", "测试"]
    for index, item in enumerate(list1):
        print index, item
    >>>
    012 一个
    3 测试
    • enumerate还可以接收第二个参数,用于指定索引起始值,如:
    list1 = ["这", "是", "一个", "测试"]
    for index, item in enumerate(list1, 1):
        print index, item
    >>>
    123 一个
    4 测试
    参考链接:https://blog.csdn.net/churximi/article/details/51648388

3.Sklearn.metrics.accuracy_score

>>> import numpy as np
>>> from sklearn.metrics import accuracy_score
>>> y_pred = [0, 2, 1, 3]
>>> y_true = [0, 1, 2, 3]
>>> accuracy_score(y_true, y_pred)
0.5
>>> accuracy_score(y_true, y_pred, normalize=False)
2

参考链接:http://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html

4.Sklearn.model_selection.KFold

>>> from sklearn.model_selection import KFold
>>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
>>> y = np.array([1, 2, 3, 4])
>>> kf = KFold(n_splits=2)
>>> kf.get_n_splits(X)
2
>>> print(kf)  
KFold(n_splits=2, random_state=None, shuffle=False)
>>> for train_index, test_index in kf.split(X):
...    print("TRAIN:", train_index, "TEST:", test_index)
...    X_train, X_test = X[train_index], X[test_index]
...    y_train, y_test = y[train_index], y[test_index]
TRAIN: [2 3] TEST: [0 1]
TRAIN: [0 1] TEST: [2 3]

参考链接:http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html

5.Sklearn.model_StratifiedKFold

The folds are made by preserving the percentage of samples for each class.

对于分类问题,应该使用分层抽样(stratified sampling)来生成数据,保证正负例的比例在训练集和测试集中的比例相同

>>> from sklearn.model_selection import StratifiedKFold
>>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
>>> y = np.array([0, 0, 1, 1])
>>> skf = StratifiedKFold(n_splits=2)
>>> skf.get_n_splits(X, y)
2
>>> print(skf)  
StratifiedKFold(n_splits=2, random_state=None, shuffle=False)
>>> for train_index, test_index in skf.split(X, y):
...    print("TRAIN:", train_index, "TEST:", test_index)
...    X_train, X_test = X[train_index], X[test_index]
...    y_train, y_test = y[train_index], y[test_index]
TRAIN: [1 3] TEST: [0 2]
TRAIN: [0 2] TEST: [1 3]

参考链接:http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html#sklearn.model_selection.StratifiedKFold

6.交叉检验

概要:
  • 训练集/测试集分割用于模型验证的缺点
  • K折交叉验证是如何克服之前的不足
  • 交叉验证如何用于选择调节参数、选择模型、选择特征
  • 改善交叉验证
不明白的问题:这里要注意的是,上面的scores都是负数,为什么均方误差会出现负数的情况呢?因为这里的mean_squared_error是一种损失函数,优化的目标的使其最小化,而分类准确率是一种奖励函数,优化的目标是使其最大化。

参考链接:https://blog.csdn.net/jasonding1354/article/details/50562513

7.用学习曲线 learning curve 来判别过拟合问题

学习曲线就是通过画出不同 训练集大小 时训练集和交叉验证的 准确率 ,可以看到模型在新数据上的表现,进而来判断模型是否方差偏高或偏差过高,以及增大训练集是否可以减小过拟合。

参考链接:1.https://www.jianshu.com/p/d89dee94e247

                 2.http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.learning_curve.html

                 3.http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.ShuffleSplit.html





猜你喜欢

转载自blog.csdn.net/sinat_37387357/article/details/80372131
今日推荐