本文共 6024 字,大约阅读时间需要 20 分钟。
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 时间特征处理
3.特征预处理
3.1 归一化
4. 机器学习(模型训练)
4.1 K-近邻算法API
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_estimator_
-
每次交叉验证后的准确率结果estimator.cv_results_
5.2 直接计算准确率
2. 线性回归
1.数据读取
2.数据预处理
3.特征预处理
4.模型训练
4.1 线性回归-正规方程API
适用于小规模数据
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)
- 对于一个常数值的学习率来说,可以使用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 特征选择的方法
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)
5.2.5 斯皮尔曼相关系数
from scipy.stats import spearmanr
5.2.6 主成分分析
- 将数据维度压缩,相关性较高的两个特征拟合成一个
- sklearn.decomposition.PCA(n_components=None)
- 将数据分解为较低维数空间
- n_components:
- 小数:表示保留百分之多少的信息
- 整数:减少到多少特征
- PCA.fit_transform(X) X:numpy array格式的数据[n_samples,n_features]
- 返回值:转换后指定维度的array
转载地址:http://lvnws.baihongyu.com/