Sklearn中的自带数据集都在datasets子命名空间中。
# 1.使用load_*函数加载Sklearn自带的小规模数据集(其中的*表示数据集名字)
# 语法:sklearn.datasets.load_*()
B1=sklearn.datasets.load_iris() # 鸢尾花数据集
B2=sklearn.datasets.load_boston() # 波士顿房价数据集
# 2.使用fetch_*函数加载Sklearn自带的大规模数据集(其中的*表示数据集名字)
# 语法:sklearn.datasets.fetch_*(数据集所在的文件夹)
# 注意事项:无论是使用load还是fetch,都返回一个继承自字典类型的Bunch类型对象
# 注意事项:大规模数据集没有存放在标准包中,需要单独从网上下载
可以通过Bunch对象中一些键来获取对应的信息。
import sklearn
iris=sklearn.datasets.load_iris() # 此处以鸢尾花数据集为例
# 1.使用 data 键获取特征数据数组
print(iris['data'])
# 2.使用 target 键获取标签数据数组
print(iris['target'])
# 3.使用 DESCR 键获取数据描述
print(iris['DESCR'])
# 4.使用 feature_names 键获取特征名
print(iris['feature_names'])
# 5.使用 target_names 键获取标签名
print(iris['target_names'])
对数据集进行划分的函数在model_selection子命名空间中。
# 使用train_test_split函数对数据集进行训练集与测试集划分
# 语法:sklearn.model_selection.train_test_split(数据集中的特征数据,数据集中的标签数据)
# 可选参数:test_size表示测试集占数据集的比例(默认为0.25),random_state表示进行划分的随机数种子(用于获取相同的划分结果)
# 返回值:返回一个元组(训练集数据,测试集数据,训练集标签,测试集标签)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris=load_iris()
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.2,random_state=1)
特征提取是指将任意数据转化为可以用于机器学习的数字特征的方法。
# 1.使用DicVectorizer对象的fit_transform方法对字典进行特征提取
# 语法:首先以无参数方式创建一个DicVectorizer对象,然后调用该对象的fit_transform方法即可(以需要进行特征提取的字典对象作为参数)
# 注意事项:如果在创建DicVectorizer对象时将sparse属性设置为True,则返回的结果是一个稀疏矩阵;如果设置为False,则是一个常规矩阵。
# 稀疏矩阵的表示:稀疏矩阵就是把矩阵中的非零元素的位置用元组表示出来。使用稀疏矩阵可以提高矩阵的加载效率。
from sklearn.feature_extraction import DictVectorizer
data=[{"city:北京","temperature:100"},{"city:上海","temperature:100"},{"city:深圳","temperature:30"}
transfer=DictVectorizer()
transfer_result=transfer.fit_transform(data)
# 之后可以使用DictVector对象的get_feature_names方法获取特征的名称
names=transfer.get_feature_names()
# 2.使用CountVectorizer对象的fit_transform方法对文本进行特征提取
# 语法:首先创建一个CountVectorizer对象,然后以需要进行特征提取的文本字符串为参数调用该对象的fit_transform方法即可,同样返回一个稀疏矩阵,表示每一个单词出现的次数
# 结果分析:以字符串中所包含的每一个单词作为一个特征
# 注意事项:该方法只能得到稀疏矩阵,而不能得到常规矩阵;但是可以使用结果变量的toarray()方法获得常规矩阵
# 得到的结果也可以通过get_feature_names方法获取特征名字
# 该方式只能对英文这种单词之间用逗号隔开的语言使用,中文不能使用。如果需要对中文进行分词则需要借用jieba等类似的中文分词模块
# 另外,可以设置停用词,也就是指定不作为特征的词语
from sklearn.feature_extraction.text import CountVectorizer
data=["life is short,i like python","life is long,i dislike python"]
transfer=CountVectorizer()
data_new=transfer.fit_transform(data)
# 3.使用TfidfVectorizer对象的fit_transform方法对文本进行特征提取
# 原理:如果某些词语在一篇文章中出现概率高,而在另一些文章中出现概率低,则认为这些词语具有很好的区分能力,适合作为分类标准。因此推荐使用这种方法而不是CountVectorizer
# 语法:和CountVectorizer的语法类似,只需修改一下转换器即可
from sklearn.feature_extraction.text import TfidfVectorizer
data=["life is short,i like python","life is long,i dislike python"]
transfer=TfidfVectorizer()
data_new=transfer.fit_transform(data)
# 使用MinMaxScaler对象的fit_transfrom方法对原始数据进行归一化
# 语法:首先创建一个MinMaxScaler对象,然后调用该对象的MinMaxScaler方法即可
# 可以在方法参数中加上feature_range参数,该参数是一个表示归一化后的上下限范围的元组
# 该方法返回一个二维的ndarray数组,其中每行表示一个样本,每列表示一个特征
# 方法的输入参数data应该是一个numpy数组:每行表示一个样本,每一列表示一个属性
from sklearn.preprocessing import MinMaxScaler
transfer=MinMaxScaler()
data_new=transfer.MinMaxScaler(data)
# 使用StandardScaler对象的fit_transform方法对原始数据进行标准化
# 语法:首先创建一个Standard对象,然后调用该对象的fit_transform方法即可
# 方法的输入参数data应该是一个numpy数组:每行表示一个样本,每一列表示一个属性
from sklearn.preprocessing import StandardScaler
transfer=StandardScaler()
data_new=transfer.StandardScaler(data)
# 1.使用VarianceThreshold对象的fit_transform方法进行特征的低方差过滤
# 语法:首先创建一个VarianceThreshold对象,然后调用该对象的fit_transform方法即可。
# 注意事项:创建对象时可以使用threshold作为参数,该参数表示方差的阈值,默认为0
from sklearn.feature_selection import VarianceThreshold
transfer=VarianceThreshold()
data_new=VarianceThreshold.fit_transform(data)
# 2.使用pearsonr函数计算指标之间的相关系数
# 语法:pearsons(数据列1,数据列2)
from scipy.stats import pearsonr
r=pearsonr(row1,row2)
# 3.使用PCA对象的fit_transform方法进行主成分分析
# 构造PCA对象时可以指定n_components参数,传递一个整数或一个小数。如果参数为小数则表示保留的数据特征比例;参数是整数表示需要保留的特征个数
# 语法:构造一个PCA对象后,以需要进行主成分分析的数据作为参数,调用PCA对象的fit_transform方法即可
# 函数的返回值是经过降维后的二维数组
from sklearn.decomposition import PCA
transfer=PCA()
data_new=transfer.fit_transform(data)
# 具体步骤:
# 1.使用模型转换器的fit方法生成训练好的模型
# 2.使用模型估计器的score方法计算预测准确率
estimator.fit(x_train,y_train)
rate=estimator.score(x_test,y_test)
# 使用KNeighborsClassfier分类器运行K近邻算法
# 构造参数1:n_neighbors表示每个点的邻居数(可选参数)
# 构造参数2:algorithm表示计算当前点最近邻居的算法(默认为auto)
from sklearn.neighbors import KNeighborsClassfier
estimator=KNeighborsClassfier(n_neighbors=3)
estimator.fit(x_train,y_train)
score=estimator.score(x_test,y_test)
print(score)
# 使用GridSearchCV对象进行网格搜索调参并进行交叉验证
# 参数介绍:
# estimator:估计器对象
# param_grid:估计器参数。以字典的形式进行表示(暴力逐一尝试)
# cv:指定交叉验证的折数
# 后续的使用方法和一般的估计器相似:使用fit方法训练数据得到模型,使用score方法求预测准确率
# 常用属性介绍:best_params_表示最佳参数结果,best_score_表示最佳成功率
# best_estimator_表示最佳估计器,cv_results_表示交叉验证结果
from sklearn.model_selection import GridSearchCV
estimator=NeighborsClassfier()
param_dict={"n_neighbors":[1,3,5,7,9]}
estimator=GridSearchCV(estimator,param_grid=param_dict,cv=10)
estimator.fit(x_train,y_train)
print(estimator.best_params,estimator.best_score,estimator.best_estimator,estimator.cv_results)
# 使用MultinomialNB分类器进行多项式朴素贝叶斯分类
# 构造参数:alpha表示拉普拉斯平滑系数,默认为1.0,一般不修改
from sklearn.naive_bayes import MultinomialNB
estimator=MultinomialNB(alpha=1.0)
MultinomialNB.fit(x_train,y_train)
# 另外,还有另外两种朴素贝叶斯分类器,分别是GaussianNB和BernoulliNB,使用方法与MultinomialNB类似
# 1.使用DecisionTreeClaaifier分类器即可进行决策树分类
# 构造时的参数random_state用于指定初始随机数种子,max_depty用于指定最大深度
# 可以增加特征选择标准参数criterion:"gini"表示基尼指数(默认),"entropy"表示信息熵
from sklearn.tree import DecisionTreeClassifier
dstree_estimator=DecisionTreeClassfier(random_state=1,criterion="entropy")
dstree_estimator.fit(x_train,y_train)
print(dstree_estimator.score(x_test,y_test))
# 2.使用export_graphviz方法保存决策树结果
# 语法:export_graphviz(决策树估计器,out_files=导出文件路径名)
# 注意事项:文件名的后缀要用dot
# 导出的文件内容可以到下面的网站进行决策树可视化:webgraphviz.com
expot_graphviz(detree_estimator,out_files="决策树.dot")
# 3.使用plot_tree方法对决策树结果可视化
# 语法:plot_tree(决策树估计器,feature_names=特征名列表)
plot_tree(dstree_estimator)
# 使用RandomForestClassifier分类器进行随机森林分类
# 参数介绍:
# n_estimators表示森林中树的个数,criterion表示特征选择的标准,max_depth表示森林中每棵树的最大深度,random_state表示初始随机数种子。
from sklearn.ensemble import RandomForestClassifier
rf_estimator=RandomForestClassifier(n_estimators=5,random_state=1,criterion="entropy")
rf_estimator.fit(x_train,y_train)
print(rf_estimator.score(x_test,y_test))
# 使用LinearRegression对象进行正规方程优化的线性回归
# LinearRegression对象的常用属性:coef_(权重系数) intercept_(偏置系数)
from sklearn.linear_model import LinearRegression
linear_estimator=LinearRegression()
LinearRegression.fit(x_train,y_train)
print("权重系数为:",LinearRegression.coef_)
print("偏置为:",LinearRegression.intercept_)
# 使用SGDRegressor对象进行梯度下降优化的线性回归,使用方法和LinearRegression对象类似
from sklearn.linear_model import SGDRegressor
linear_estimator=SGDRegressor()
LinearRegression.fit(x_train,y_train)
print("权重系数为:",LinearRegression.coef_)
print("偏置为:",LinearRegression.intercept_)
# 对于回归器,可以通过square_error方法输出其均方误差和
print("均方误差为:",LinearRegression.square_error(x_test,y_test))
# 使用LogisticRegression分类器进行逻辑回归
from sklearn.linear_model import LogisticRegression
logit_estimator=LogisticRegression()
logit_estimator.fit(x_train,x_test)
print(logit_estimator.score(x_test,y_test))
# 使用classfication_report对象生成分类报告
# 构造参数:y_true表示真实目标值,y_pred表示预测目标值,labels指定类别对应的数字
# 返回值:每个类别的精确率和召回率
from sklearn.metrics import classification_report
print(classfication_report(y_test,y_predict))