机器学习–算法基础
1 机器学习基础
1.1 算法是核心,数据和计算是基础
1.2 找准定位
* 大部分复杂模型的算法设计都是算法工程师在做,而我们:
* 分析很多数据
* 分析具体业务
* 应用常见的算法
* 特征方程,调参数,优化
* 我们应该怎么做?
* 学会分析问题,使用机器学习算法的目的,想要算法完成什么或者何种任务
* 掌握算法的基本思想,学会对问题用相应的算法解决
* 学会利用库或者框架解决问题
2 机器学习算法的分类
2.1 监督学习:有特征值和目标值
2.1.1 分类
(1) k-近邻算法
(2) 贝叶斯算法
(3) 决策树与随机森林
(4) 逻辑回归
(5) 神经网络
2.1.2 回归:线性回归,岭回归
2.2 无监督学习:只有特征值
2.2.1 聚类
2.3
2.3.1 分类:目标值是离散的(离散型:数据不可再分)
2.3.2 回归:目标值是连续的(连续性:数据可再分)
2.4 练习:说一说他们属于什么类别的问题
(1) 预测明天的气温是多少?
连续性问题:回归
(2) 预测明天是晴天还是阴天?
分类
(3) 人脸的年龄预测?
(4) 人脸识别?
分类
3 机器学习算法应用
3.1获取数据
3.1.1 公司本身的数据
3.1.2 合作过来的数据
3.1.3 购买的数据
3.1.4 学习阶段(机器学习)可以使用的数据有
(1) 鸢尾花数据集:https://scikit-learn.org/stable/datasets
(2) UCI数据集:http://archive.ics.uci.edu/ml/index.php
(3) kaggle数据集:https://www.kaggle.com/datasets
3.2 数据基本处理
pandas/sk-learn
3.3 特征工程
3.3.1 特征工程用法
3.3.2 sklearn数据集
sklearn.datasets
* load_*():加载,获取小规模数据集
* fetch_*():加载大规模数据集
3.3.3 sk-learn小数据集
sklearn.datasets.load_iris():加载并返回鸢尾花数据集
鸢尾花数据集:
类别:3
特征值:4
样本容量:150
每个类别的数量:50
加载波士顿房价数据集:sklearn.datasets.load_boston()
3.3.4 数据集返回值
datasets.base.Bunch(继承自字典的)
对字典进行取值:
(1) dict1['key'] = value
(2) bunch.key = value
3.4 数据集划分
* 训练集:用于训练
* 测试集:用于测试
问:在sk-learn中如何实现数据集的划分?
答:调用sklearn.model_selection.train_test_split(....)这个API
X:一般为数据集的特征值
Y:一般为数据集的目标值
* test_size:划分数据的比例,默认是0.25
* random_state:随机数种子,不同的随机数种子会造成不同的随机采样结果
* 返回值:
return:训练集特征值,测试集特征值,训练集目标值,测试集目标值
x_train x_text y_train y_test
4 分类算法-K近邻算法(KNN)
4.1 定义:如果一个样本在特征空间中的K个最相似(即特征空间中最近邻)的样本中大多数属于这个类别
则该样本也属于这个类别
4.2 距离公式:欧式距离
4.3 API
sklearn.KNeighborsClassifier(n_neighbors=数值)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
def knn_iris():
"""
用KNN算法对鸢尾花进行分类
:return: None
"""
iris = load_iris()
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.25,random_state=22)
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
estimator = KNeighborsClassifier(n_neighbors=3)
estimator.fit(x_train,y_train)
y_predict = estimator.predict(x_test)
print('y_predict\n',y_predict)
print('直接比对真实值与预测值:\n',y_test == y_predict)
score = estimator.score(x_test,y_test)
print('精确率:\n',score)
return None
if __name__ == "__main__":
knn_iris()