从数据中学习,得到模型,通过模型预测结果
1.传统预测
2.图像识别
3.自然语言处理
1.监督学习:有目标值
目标值:类别 (分类问题)
分类:k-近邻算法,贝叶斯分类,决策树与随机森林,逻辑回归
目标值:连续型的数据 (回归问题)
回归:线性回归,岭回归
2.无监督学习:
1.获取数据
2.数据处理
3.特征工程
4.机器学习算法训练,得到模型
5.模型评估
6.应用
load_* 获取小规模数据集(数据包含在datasets)
栗子:sklearn.datasets.load_iris()
fetch_* 获取大规模数据集(从网络上下载的大规模数据)
栗子:sklearn.datasets.fetch_20newsgroups(data_home=None,subset='all')
PS:subset:有’train’(训练集的"训练"),‘test’(测试集的"测试"),‘all’(两者的"全部")三种类型
datasets.base.Bunch
(继承自字典)
方法一:dict[“key”] = values
方法二:bunch.key = values
load和fetch返回的数据类型datasets.base.Bunch(字典格式),所以有键值对
键的五种类型:
1. data(特征值):特征数据数组,是[n_samples*n_features]的二维numpy.ndarray数组
2. target(目标值):标签数组,是n_samples的一维numpy.ndarray数组
3. DESCR:数据描述
4. feature_names:特征名, 新闻数据,手写数据,回归数据集没有
5. target_names:标签名
栗子:
from sklearn.datasets import load_iris
def datasets1():
set1 = load_iris()
print(f"鸢尾花数据集:\n{set1}")
print(f"查看数据集:\n{set1['DESCR']}")
print(f"查看特征值的名字:\n{set1.feature_names}")
return None
if __name__ == "__main__":
datasets1()
分析
# ----导入sklearn库中的iris数据----
from sklearn.datasets import load_iris"
# ----定义一个查看iris相关数据的函数----
def datasets1():
set1 = load_iris()
print(f"鸢尾花数据集:\n{set1}")
print(f"查看数据集:\n{set1['DESCR']}")
print(f"查看特征值的名字:\n{set1.feature_names}")
return None
# ----调用上面的函数----
if __name__ == "__main__":
PS: if __name__ == '__main__':的运行原理
每个python模块都包含内置的变量 __name__,当该模块被直接执行的时候,__name__ 等于文件名(包含后缀 .py );如果该模块 import 到其他模块中,则该模块的 __name__ 等于模块名称(不包含后缀.py)。
而 “__main__” 始终指当前执行模块的名称(包含后缀.py)。进而当模块被直接执行时,__name__ == 'main' 结果为真。
datasets1()
PS:运行后数据有4列,说明有四个特征值
Attribute Information:(特征值)
花的长,宽
- sepal length in cm
- sepal width in cm
- petal length in cm
- petal width in cm
class:(目标值)
鸢尾花的三个类别:
- Iris-Setosa
- Iris-Versicolour
- Iris-Virginica
特征工程会直接影响机器学习的效果
特征工程的位置与数据处理的比较:
pandas:数据清洗,数据处理
sklearn:特征工程
1.特征抽取:将任意数据转化为可用于机器学习的数字特征
字典特征提取(特征离散化)
文本特征提取
图像特征提取
特征提取API
sklearn.feature_extraction
3.字典提取特征:将类别转换为one-hot编码
sklearn.feature_extraction.DicVectorizer()
DicVectorizer.fit_transform(X)
X:字典或包含字典的迭代器返回值,返回sparse矩阵
DicVectorizer.inverse_transform(X)
X:array数组或者sparse矩阵,返回值:转换之前数据格式
DicVectorizer.get_feature_names()
返回类别名称
vector 数学:向量 物理:矢量
矩阵:matrix 二维数组
向量:vector 一维数组
通过一些转化函数将特征数据转换成更加适合算法模型的特征数据过程
数值型数据的无量纲化:消除由于不同特征数据数量级差别过大带来的影响
sklearn.preprocessing
归一化:将原始数据进行变化把数据映射到一个范围(默认[0,1])之间
- API
sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)...)
MinMaxScaler.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array
标准化:通过对原始数据进行变换把数据变换到均值为0,标准差为1的范围
- API
sklearn.`preprocessing.StandardScaler()
StandardScaler.fit_transform(X)
归一化和标准化区别
- 归一化:如果出现异常点,影响了最大值和最小值.结果会发生改变
- 标准化:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响不大,从而方差改变较小
class sklearn.tree.DecisionTreeClassifier(criterion='gini',max_depth=None,random)
sklearn.tree.export_graphviz()
能导出dot格式tree.export_graphviz(estimator,out_file='tree.dot',feature_names=[","])
class sklearn.ensemble.RandomForestClassifier(n_estimators=10,criterion='gini',max_depth=None,bootstrap=True,random_state=None,min_samples_split=2)
将拿到的训练数据,分为训练和验证集
比如将数据分成4份,其中一份作为验证集,然后经过4次测试,每次更换不同的验证集,得到四组模型的结果,称为4折交叉验证
训练集:训练集 + 验证集
测试集:测试集
需要手动指定的(如k-近邻算法中的k值),叫做超参数.由于手动过程繁杂,所以对模型预设几种超参数组合.每组超参数都采用交叉验证来进行评估,最后选出最优参数组合建立模型
sklearn.model_selection.GridSearchCV(estimator,param_grid=None,cv=None)
best_params_
best_score_
best_estimator_
cv_results_
降维:降低二维数组中随机变量的个数,得到一组"特征之间不相关"主变量的过程
特征选择:数据中包含冗余或相关变量(或称特征,属性,指标等),旨在从原有特征中找出主要特征
方法:
1.filter(过滤式)
主要探究特征本身特点,特征与特征和目标值之间关联
方差选择法:低方差特征过滤
删除低方差的一些特征,再结合方差的大小来考虑这个方式的角度
特征方差小:某个特征大多样本的值比较相近(去掉)
特征方差大:某个特征很多样本的值都有差别(保留)
API:
sklearn.feature_selection.VarianceThreshould(thresh = 0.0)
删除所有低方差特征:
Variance.fit_transform(X)
X:numpy array格式的数据[n_samples.n_features]
返回值:训练集差异低于threshould的特征将被删除.默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征
相关系数:特征与特征之间的相关程度
取值范围:-1 <= r <= +1
API:
from scipy.stats import pearsonr
- x:(N,)array_like
- y:(N,)array_like Returns:(Pearson’s correlation coefficient,p-value)
特征与特征之间相关性很高:
1.选取其中一个
2.加权求和
3.主成分分析:
- 定义:高维数据转换为低维数据的过程,在此过程中可能会舍弃原有数据,创造新的变量
- 作用:使数据维数压缩,尽可能降低原数据的维度(复杂度),损失少量信息
- 应用:回归分析或者聚类分析当中
API:
sklearn.decomposition.PCA(n_components = None)
1.n_components:
- 小数:表示保留百分之多少的信息
- 整数;减少到多少特征
2.PCA.fit_transform(X)
- X:numpy array格式的数据
3.返回值:转换后指定维数的array
2.Embedded(嵌入式):算法自动选择特征(特征与目标值之间的关联)
- 决策树
- 正则化
- 深度学习
用于解决二分类问题
sklearn.linear_model.LogisticRegression(solver='liblinear',penalty='I2',C=1.0)
TP = True Possitive
FN = False Negative
sklearn.metrics.classification_report(y_true,y_pred,labels=[],target_names=None)