sklearnAPI

1. K-近邻算法

1.读取数据

1.1sklearn.datasets
  • datasets.load_* — 读取较小数据
  • datasets.fetch_* — 读取较大的数据
    • 参数:subset = “ ”,train,test,all可选,选择要加载的数据集
    • 返回值:datasets.base.Bunch(字典格式)
      • data:特征数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组
      • target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
      • DESCR:数据描述
      • feature_names:特征名,新闻数据,手写数字、回归数据集没有
      • target_names:标签名

2.数据预处理

2.1 数据集划分

sklearn.model_selection.train_test_split(arrays, *options)

  • 参数:
    • x 数据集的特征值
    • y 数据集的标签值
    • test_size 测试集的大小,一般为float
    • random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
  • return
    • x_train, x_test, y_train, y_test
2.2 缩小数据范围
2.3 时间特征处理
  • 有时候时间以计算机标准时间格式出现,有时候需要转换成日期加时间的格式

    • time = pd.to_datetime(facebook_data[“time”], unit=“s”)
      time = pd.DatetimeIndex(time)
      facebook_data[“day”] = time.day
      facebook_data[“hour”] = time.hour
      facebook_data[“weekday”] = time.weekday

3.特征预处理

3.1 归一化
  • sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )

    • MinMaxScalar.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
      • 返回值:转换后的形状相同的array
    • 使用步骤
      • 使用Min Max Scaler()实例化一个对象 transfer
      • transfer.fit_transform
    3.2 标准化
  • sklearn.preprocessing.StandardScaler( )

    • 处理之后每列来说所有数据都聚集在均值0附近标准差差为1
    • StandardScaler.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array
  • 使用步骤

    • 使用StandardScaler()实例化一个对象 transfer
    • transfer.fit_transform

4. 机器学习(模型训练)

4.1 K-近邻算法API
  • sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)

    • n_neighbors:
      • int,可选(默认= 5),k_neighbors查询默认使用的邻居数
    • algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’}
      • 快速k近邻搜索算法,默认参数为auto,可以理解为算法自己决定合适的搜索算法。除此之外,用户也可以自己指定搜索算法ball_tree、kd_tree、brute方法进行搜索,
        • brute是蛮力搜索,也就是线性扫描,当训练集很大时,计算非常耗时。
        • kd_tree,构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也就是数据结构中的二叉树。以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高。
        • ball tree是为了克服kd树高维失效而发明的,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体。
  • 用法

    • 1.实例化对象模型

      • estimator = KNeighborsClassifier(n_neighbors=9)
    • 2.模型训练

      • estimator.fit(x_train, y_train)
4.2 交叉验证

交叉验证目的:为了让被评估的模型更加准确可信

  • 交叉验证,网格搜索(模型选择与调优)

    • sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
      • 对估计器的指定参数值进行详尽搜索
      • estimator:估计器对象
      • param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}
      • cv:指定几折交叉验证
      • fit:输入训练数据
      • score:准确率
      • 结果分析:
        • bestscore__:在交叉验证中验证的最好结果
        • bestestimator:最好的参数模型
        • cvresults:每次交叉验证后的验证集准确率结果和训练集准确率结果
  • 实例

    • 4、KNN预估器流程
      #  4.1 实例化预估器类
      estimator = KNeighborsClassifier()
      
      # 4.2 模型选择与调优——网格搜索和交叉验证
      # 准备要调的超参数
      param_dict = {"n_neighbors": [1, 3, 5]}
      estimator = GridSearchCV(estimator, param_grid=param_dict, cv=3)
      # 4.3 fit数据进行训练
      estimator.fit(x_train, y_train)
      

5. 模型评估

5.1 查看预测结果数据
  • 查看预测值 y_predict = estimator.predict(x_test)

  • 查看交叉验证中最好的结果:

    • estimator.best_score_
      
  • 最好的参数模型
    estimator.best_estimator_
    
  • 每次交叉验证后的准确率结果
    estimator.cv_results_
    
5.2 直接计算准确率
  • score = estimator.score(x_test, y_test)
    

2. 线性回归

1.数据读取

2.数据预处理

3.特征预处理

4.模型训练

4.1 线性回归-正规方程API

适用于小规模数据

  • sklearn.linear_model.LinearRegression()

  • LinearRegression.coef_:回归系数

  • 实例

    • # 实例化API
      estimator = LinearRegression()
      # 使用fit方法进行训练
      estimator.fit(x,y)
      
      estimator.coef_
      
      estimator.predict([[100, 80]])
      
4.2 梯度下降–SGDRegressor

sklearn.linear_model.SGDRegressor(loss=“squared_loss”, fit_intercept=True, learning_rate =‘invscaling’, eta0=0.01)

  • SGDRegressor类实现了随机梯度下降学习,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型。
  • 参数:
    • loss:损失类型
      • loss=”squared_loss”: 普通最小二乘法
    • fit_intercept:是否计算偏置
    • learning_rate : string, optional
      • 学习率填充
      • ’constant’: eta = eta0
      • ’optimal’: eta = 1.0 / (alpha * (t + t0)) [default]
      • ‘invscaling’: eta = eta0 / pow(t, power_t)
        • power_t=0.25:存在父类当中
      • 对于一个常数值的学习率来说,可以使用learning_rate=’constant’ ,并使用eta0来指定学习率。
  • 属性:
    • SGDRegressor.coef_:回归系数
    • SGDRegressor.intercept_:偏置
4.3 全梯度下降–FG
4.4 随机梯度下降–SG
4.5 小批量梯度下降
4.6 随机梯度下降

5.模型评估

5.1 MSE–均方误差
  • sklearn.metrics.mean_squared_error(y_true, y_pred)
    • 均方误差回归损失
    • y_true:真实值
    • y_pred:预测值
    • return:浮点数结果

3. 逻辑回归

1.数据读取

2.数据预处理

3.特征预处理

4.模型训练

5.模型评估

4. 决策树算法

1.数据读取

2.数据预处理

3.特征预处理

3.1特征提取
  • sklearn.feature_extraction
3.2 字典特征提取
  • sklearn.feature_extraction.DictVectorizer(sparse=True,…)
    • DictVectorizer.fit_transform(X)
      • X:字典或者包含字典的迭代器返回值
      • 返回sparse矩阵
    • DictVectorizer.get_feature_names() 返回类别名称
3.3 文本特征提取
3.3.1 英文文本特征提取
  • sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
    • 返回词频矩阵
    • CountVectorizer.fit_transform(X)
      • X:文本或者包含文本字符串的可迭代对象
      • 返回值:返回sparse矩阵
    • CountVectorizer.get_feature_names() 返回值:单词列表
  • sklearn.feature_extraction.text.TfidfVectorizer
3.3.2 中文问题特征提取
  • pip install jieba
  • jieba.cut(“data”): 返回的是一个对象格式的,要使用list()转换成列表形式
  • 再用 “ ”.join(list) 进行分词

4.模型训练

  • class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None)

    • criterion
      • 特征选择标准
      • “gini"或者"entropy”,前者代表基尼系数,后者代表信息增益。一默认"gini",即CART算法。
    • min_samples_split
      • 内部节点再划分所需最小样本数
      • 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。我之前的一个项目例子,有大概10万样本,建立决策树时,我选择了min_samples_split=10。可以作为参考。
    • min_samples_leaf
      • 叶子节点最少样本数
      • 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。之前的10万样本项目使用min_samples_leaf的值为5,仅供参考。
    • max_depth
      • 决策树最大深度
      • 决策树的最大深度,默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间
    • random_state
      • 随机数种子
  • estimator = DecisionTreeClassifier(criterion="entropy", max_depth=5)
    estimator.fit(x_train, y_train)
    

5.模型评估

5.1

5. 聚类算法

API:

  • sklearn.cluster.KMeans(n_cluster=8)
    • 参数:
      • n_clusters:开始的聚类中心数量
        • 整型,缺省值=8,生成的聚类数,即产生的质心(centroids)数。
    • 方法:
      • estimator.fit(x)
      • estimator.predict(x)
      • estimator.fit_predict(x)
        • 计算聚类中心并预测每个样本属于哪个类别,相当于先调用fit(x),然后再调用predict(x)

5.2 特征工程 – 降维

5.2.1 降维的两种方式

​ 特征选择,主成分分析

5.2.2 特征选择的方法
  • 过滤,filter
  • 嵌入式
5.2.3 低方差特征过滤
  • sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
  • 删除所有低方差特征
  • Variance.fit_transform(X)
    • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。
5.2.4 皮尔逊相关系数

​ from scipy.stats import pearsonr

  • x : (N,) array_like
  • y : (N,) array_like Returns: (Pearson’s correlation coefficient, p-value)
    • 实例:pearsonr(x1, x2)
5.2.5 斯皮尔曼相关系数

​ from scipy.stats import spearmanr

  • 实例:

    spearmanr(x1, x2)
    
5.2.6 主成分分析
  • 将数据维度压缩,相关性较高的两个特征拟合成一个
  • sklearn.decomposition.PCA(n_components=None)
    • 将数据分解为较低维数空间
    • n_components:
      • 小数:表示保留百分之多少的信息
      • 整数:减少到多少特征
    • PCA.fit_transform(X) X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后指定维度的array
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐