Sklearn库是基于Python的第三方库,它包括机器学习开发的各个方面。
机器学习的开发基本分为六个步骤, 1)获取数据, 2)数据处理, 3)特征工程, 4)机器学习的算法训练(设计模型), 5)模型评估, 6)应用。
机器学习的算法一般分为两种:一种既有目标值又有特征值的算法称之为监督学习,另一种只有特征值的算法称之为无监督学习。而监督学习还可以继续细分为分类算法和回归算法。
一、获取数据
Sklearn中获取数据集使用的包为Sklearn.datasets,之后可以接load_* 和fetch_*从Sklearn为初学者提供的数据集中获取数据。
其中,load获取的是小规模的数据集,fetch获取的是大规模的数据集。
代码语言:javascript复制from sklearn.datasets import load_iris
iris=load_iris()
from sklearn.datasets import fetch_20newsgroups
news=fetch_20newsgroups
获取数据可以调用的方法:
.data 特征数据数组
.data.shape 特征值的数量
.target 目标值数组
.DESCR 数据描述
.feature_names 特征值的名字
.target_names 目标值的名字
数据集的返回值:
datasets.base.Bunch(继承自字典的格式)
dict[“key”]= values
bunch.key=values
可以获取对应的值
二、数据处理
获取后的数据不是可以直接使用,机器学习的模型获取需要在训练集中进行训练得出模型,而后在测试集中进行测试,所以得到的数据集需要进行划分:
Sklearn中提供可用于对数据集划分训练集和测试集的方法:
Sklearn.model_selection.train_test_split()
输入值x为数据集的特征值
输入值y为数据集的目标值
test_size 测试集的大小,一般为float
random_state 随机数种子,不用的随机数种子会产生不同的随机采样结果。
返回值的按照顺序为:训练集特征值,测试集特征值,训练集目标值,测试集目标值
代码语言:javascript复制from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=22)
三、特征工程
pandas:一个非常方便的读取数据并进行基本的处理的工具
Sklearn:提供了很强大的特征处理的接口
1、特征提取:
①字典特征提取:
代码语言:javascript复制Sklearn.feature_extraction.DictVectorizer
DictVectorizer.fit_transform()
输入值为字典或者包含字典的迭代器
返回值为sparse矩阵,可以使用False改变返回值的类型为二维数组
DictVectorizer.inverse_transform()
输入值为数组或者sparse矩阵
返回值为转换之前的数据格式
DictVectorizer.get_feature_names()
返回值为类别的名称
应用的场景:1.类别较多,将数据集的特征转化为字典类型,再利用DictVectorizer进行转换2.拿到的是字典类型的数据
②文本特征提取:
代码语言:javascript复制Sklearn.feature_extraction.text.CountVectorizer(stop_words[])
stop_words:停用词指的是指定的词不在做为文本特征提取的处理对象
CountVectorizer.transfer.fit_transform()
输入值为文本字典或者包含文本字符串的迭代器
返回值为sparse矩阵,sparse矩阵使用toarray方法可以直接转换为二维数组
CountVectorizer.inverse_transform()
输入值为数组或者sparse矩阵
返回值为转换之前的数据格式
CountVectorizer.get_feature_names
返回值为类别的名称
中文分词可以使用jieba库,实现字符串的转换分词。
TFIDF文本特征抽取,利用词在一个文章中使用频率与别的文章有很大区别,来实现特征的提取。
TFIDF文本特征提取的方法:Sklearn.feature_extraction.text.TfidfVectorizer(stop_words[])
TfidfVectorizer.transfer.fit_transform()
输入值为文本字典或者包含文本字符串的迭代器
返回值为sparse矩阵,sparse矩阵使用toarray方法可以直接转换为二维数组
TfidfVectorizer.inverse_transform()
输入值为数组或者sparse矩阵
返回值为转换之前的数据格式
TfidfVectorizer.get_feature_names
返回值为类别的名称
2、特征预处理:
①归一化:
sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)....)
feature_range=(0,1)数据处理后的范围
MinMaxScaler.fit_traensform()
输入值为numpy array格式的数据[n_samples,n_features] [样本数,特征数]
返回值为形状相同的array
缺点:这种方式会受到异常值的很大的影响。
②标准化:
sklearn.preprocessing.StandardScaler
不用指定范围会直接将数据处理到(0,1)的范围内,均值为0,标准差为1
StandardScaler.fit_traensform()
输入值为numpy array格式的数据[n_samples,n_features] [样本数,特征数]
返回值为形状相同的array
标准化的方法比较适合大数据的处理,在样本足够多的情况下比较稳定。
3、特征降维:
指的是降低特征的个数,除去不相关的特征。
Filter过滤式降维方法:
①方差过滤式降维:
代码语言:javascript复制sklearn.feature_selection.VarianceThreshold(threshold=0.0)
VarianceThreshold.fit_transform()
输入值为numpy array格式的数据[n_samples,n_features] [样本数,特征数]
返回值为删除了低方差特征的特征后的数组
②相关系数过滤式降维:
相关系数的计算方法:scipy.stats.pearsonr(x,y)
输入值为数据的特征的名称
③主成分分析(PCA)
sklearn.decomposition.PCA(n_components=None)
将数据进行处理,实现数据的降维。
n_components:
小数:保留百分之多少的信息
整数:减少到剩余多少个信息
PCA.fit_transform()
输入值为numpy array格式的数据[n_samples,n_features] [样本数,特征数]
返回值为转换之后为指定维数的数组
四、机器学习的算法训练(设计模型)
Sklearn中算法训练的基本使用:
1.实例化一个estimator类
2.estimator调用fit()方法,对送入的x_train,y_train值进行训练
3.模型评估: y_predict=estimator.(x_test)
y_predict==y_test 或 accuracy=estimator.score(x_test,y_test)计算出准确率
分类算法:
①KNN算法:
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')
n_neighbors为K值,algorithm默认为auto,一般不用设置,会选择最佳的算法
优点:简单易于理解,易于实现
缺点:懒惰算法,计算量大,内存的开销比较大,K值的选择不一定,需要找到最适合K值才能实现好的结果。
②网格搜索与交叉验证:
sklearn.model_selection.GridSearchCV(estimator,param_grid=None,cv=None)
返回值为estiamtor对象
estimator:预估器对象
param_grid:预估器参数{“n_neighbors”:[1,3,5,7,9]}
cv:进行交叉验证的折数
可使用的方法:
.fit()输入训练数据进行训练
.score()输出训练的准确率
最佳参数:best_param_
最佳结果:best_score_
最佳预估器 :best_estimator_
交叉验证结果:cv_results_
③朴素贝叶斯算法:认定各个特征之间是相互独立的。
拉普拉斯平滑系数:分子加上α,分母加上mα(训练文档中特征词出现的个数,α值常为1)
sklearn.naive_bayes.MultinomialNB(alpha=1.0)
优点:分类效率稳定,对缺失数据不太敏感,算法也比较简单,常用于文本分类
缺点:由于假设了特征之间的相互独立,如果所用的数据集中的特征之间存在关联,就会产生不合适的结果
④决策树:通过将特征进行排序,将影响更大的特征优先进行考虑,可以使用信息增益(信息熵-条件信息熵)作为判定的依据
sklearn.tree.DecisionTreeClassifier(criterion='gini',max_depth=None,random_state=None)
criterion:默认为’gini’,作为判定的依据,也可以改为’entropy’即为信息增益
max_depth:树的深度大小(可以通过改变深度大小,减小决策树的过拟合)
random_state:随机数种子
决策树的可视化:
sklearn.tree.export_graphviz(estimator,out_file="tree.dot ",feature_names)
feature_names在输入之后才能显示在对应的位置
优点:简单易理解,可以实现可视化
缺点:没有设置深度,容易产生过拟合
⑤随机森林:训练集随机:随机有放回抽样;特征随机:从M个特征中,抽取m个特征,M>>m
sklearn.ensemble.RandomForestClassifier(n_estimator=10,criterion='gini',max_depth=None,bootstrap=True,random_state=None,min_sample_lit=2)
max_features=“auto”:默认为“auto”,每个决策树的最大特征数量,即为m值得选取方法。
if”auto”,求平方根;if”sqrt”,求平方根;if”log2″,求log2();if None,使用M值
{“n_estimators”:[120,200,300,500,800,1200],“max_depth”:[5,8,10,15,30]}
优点:具有很好的准确率,处理高维样本很有优势
五、回归算法:
①线性回归:将目标值和特征值当做线性关系,来实现拟合,得到回归算法。线性模型不等于线性关系,参数一致的非线性关系也可以称作线性模型。
正规方程: sklearn.linear_model.LinearRegression(fit_intercept=True) `
fit_intercept:是否计算偏置
LinearRegression.coef_:回归系数
LinearRegression.intercept_:偏置
梯度下降:sklearn.linear_model.SGDRegressor(loss="squared_loss",fit_intercept=True,learning_rate='invscaling',eta0=0.01)
loss:损失类型,squared_loss最小二乘法的损失函数类型
max_iter:迭代次数
fit_intercept:是否计算偏置
learning_rate:string,optional(指的是步长)
‘constant’:eta=eta0
”optional”:eta=1.0/(alpha*(t t0))[defult]
‘invscaling’:eta=eta0/pow(t,power_t) power_t=0.25
SGDRegressor.coef_:回归系数
SGDRegressor.intercept_:偏置
模型评估方法(均方误差评估)
sklearn.metrics.mean_squared_error(y_true,y_pre)
y_true:真实值
y_pre:预测值
return:浮点数结果
②岭回归:进行正则化处理时削弱某些特征值的作用,从而结果过拟合与欠拟合的问题。
L1正则化:直接删除,L2正则化:削弱作用
sklearn.linear_model.Ridge(alpha=1.0,fit_intercept=True,solver"auto",normolize=False)
alpha:正则化力度,也叫λ取值01或者110
solver:会根据数据集自动选择优化方法
normalize:数据是否进标准化,如果设置为True就不用再前面进行标准化,实现效果是一样的
Ridge.coef_:回归系数
Ridge.intercept_:偏置
Ridge方法相当于SGDRegressor(penalty=‘l2’,loss=“squared_loss”),但是后者缺少可SAG
③逻辑回归:
sklearn.linear_model.LogisticRegression(solver="liblinear",penalty="l2"C=1.0)
solver:优化求解方式
penalty:正则化种类
C:正则化力度
模型评估(精确率和召回率):sklearn.metrics.classification_report(y_true,y_pre,lables[],targer_names=None)
lables:指定类别对应的数字
target_names:目标类别名称
return:每个类别的精确率和召回率
模型评估(ROC曲线和AUC指标):sklearn.metrics.roc_auc_score(y_true,y_score)
y_true=每个样本的真实类别,必须为0(反例),1(正例)
y_score=预测得分,可以是正例的估计概率,置信值,分类器方法的返回值
AUC只能用来评估二分类的问题,非常适合评价样本不均衡中的分类器性能
模型保存和加载:sklearn.externals. joblib
保存模型:joblib.dump(estimator,“my_ridge.pkl”)
加载模型:estimator=joblib.load(“my_ridge.pkl”)
无监督学习:
K-means算法:
sklearn.cluster.KMeans(n_clusters=8)
n_clusters:聚类中心的数量
lables:默认标记的类型,可以和真实值进行比较
模型评估:高内聚,低耦合(外部距离最大化,内部距离最小化)
sklearn.metrics.silhouette_score(X,labels)轮廓系数
X:特征值
labels:被聚类标记的目标值
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/184785.html原文链接:https://javaforall.cn