机器学习基础知识
作者:互联网
一、 机器学习项目的一般步骤:
1.明确任务,收集数据
我们首先要明确可以获得什么样的数据,机器学习的目标是什么,该任务是否可以归为标准的机器学习任务,如是否为分类、回归。如果我们可以控制数据收集,则应确保获取的数据具有代表性,否则容易过拟合。对于分类问题,数据偏斜不能过于严重。
2.数据预处理和特征工程
收集到数据后,我们需要对数据进行探索式分析,以确定后续怎样进行特征变换和选用哪些机器学习模型。
对数据进行探索式分析包括以下内容:
(1)特征的数据类型(如连续值、离散值、文本、时间、地理位置等)。
(2)特征是否有缺失值。
(3)特征的分布(如高斯分布、均匀分布、指数分布等)。
(4)特征与标签之间的关系。
(5)特征与特征之间的相关性。
原始数据通常有噪声,需要进行数据清洗,包括以下内容:
(1)处理或删除异常值。
(2)填充缺失值(如零、均值、中位数等)或删除他们所在的行(或列)。
原始数据可能不符合机器学习算法的要求,这时我们需要将其转换为算法可接受的格式,在机器学习中,这个过程被称为特征工程。特征工程,包括在原始数据中进行特征构建、特征提取和特征选择。
3.模型训练
进行模型训练时,我们首先应根据数据的特点和要解决的问题选择合适的模型,需要考虑的因素包括要解决问题是分类还是回归,以及样本数、特征维度、对内存的消耗程度、时间复杂度要求等。
模型类型确定好以后,我们就可以根据训练数据,采用优化算法得到最佳的模型参数。这里特指的是在给定模型超参数的情况下,根据训练数据对模型参数进行训练。
4.模型评估和超参数调优
模型训练好后,我们还需要对模型的性能进行评估,模型评估在验证集上进行,根据验证集上不同超参数对应模型的性能,可以对超参数进行调优。验证集可以是一个独立于训练集的数据集,也可以采用交叉验证的方式循环地从训练数据中分出一部分数据作为验证集。
我们利用模型评估可以判断模型是过拟合还是欠拟合,并且可以通过增加训练的数据量,降低模型复杂度来降低过拟合的风险,还可以通过提高特征的数量和质量增加模型复杂度来防止欠拟合。此外,通过分析误差产生的原因,还可以提出针对性的模型迭代方案,进一步提升系统性能。
5.模型融合
在工程上,主要用于提升算法准确度的方法是分别在模型的前端(数据预处理和特征工程)与后端(模型融合)上下功夫。一般来说,模型融合后都能使效果有一定的提升。第7章介绍的集成机器学习可对模型进行融合。
6.模型应用
模型应用包括系统启动、监控和维护等内容。我们需要将准备好的生成环境数据鼓人机器学习模型,并定期检查系统的性能,定期根据新数据更新模型。
二、线性回归
特征变换:
1y=df['sales']
2X=df.drop(['sales','Unnamed:0'],axis=1)
随机选择其中80%的样本作为训练数据,其余20%的数据作为测试样本
3X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.2)
用训练数据训练最小二乘线性回归(无正则)、岭回归(L2正则)和Lasso(L1正则),注意岭回归和Lasso的正则超参数调优,性能指标为RMSE:
比较上述三种模型得到的各特征的回归系数,以及各模型在测试集上的性能。
回归系数:岭回归、Lasso得到的回归系数绝对值均比最小二乘线性回归小,即起到了权值收缩的效果(不全,具体回归系数分析看P36页最上行)
性能:最小二乘线性回归在训练集上的性能最好,但在测试集上的性能最差;Lasso模型在测试集上的性能最好。
4# 导入pandas工具包
5import pandas as pd
6# 读取数据
7dpath="./data/"
8df=pd.read_csv(dpath+"Advertising.csv")
9# 从原始数据中分离输入特征x和输出y
10y=df['sales']
11X=df.drop(['sales','Unnamed:0'],axis=1)
12# 将数据分割为训练数据与测试数据,随机采样20%的数据构建测试样本,其余作为训练样本
13from sklearn.model_selection import train_test_split
14X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33, test_size=0.2)
15
16# 方法一:
17# 最小二乘线性回归
18from sklearn.linear_model import LinearRegression
19# (1)使用默认配置初始化学习器实例
20lr=LinearRegression()
21# (2)使用训练数据训练模型参数
22lr.fit(X_train,y_train)
23# (3)用训练好的模型对测试集进行预测
24y_test_pred_lr = lr.predict(X_test)
25y_train_pred_lr = lr.predict(X_train)
26# (4)性能评估,R方分数
27print("The r2 score of LinearRegression on test is %f" % (r2_score(y_test, y_test_pred_lr)))
28print("The r2 score of LinearRegression on train is %f" % (r2_score(y_train, y_train_pred_lr)))
29# (5)在训练集上观察预测残差的分布,看是否符合模型假设:噪声为0均值的高斯噪声
30res = y_train_pred_lr - y_train
31
32
33# 方法二:
34# L1正则的线性回归模型
35from sklearn.linear_model import LassoCV
36# (1)设置超参数搜索范围(默认超参数搜索范围)
37# 在LassoCV(alpha= )设置alpha的值
38# (2)生成LassoCV实例(用交叉验证确定最佳超参数)
39lasso=LassoCV()
40# (3)训练(内含CV)
41lasso.fit(X_train,y_train)
42# (4) 测试
43y_test_pred_lasso = lasso.predict(X_test)
44y_train_pred_lasso = lasso.predict(X_train)
45# (5)评估,使用r2_score评价模型在测试集和训练集上的性能
46print("The r2 score of lasso on test is %f" % (r2_score(y_test, y_test_pred_lasso)))
47print("The r2 score of lasso on train is %f" % (r2_score(y_train, y_train_pred_lasso)))
48#lasso.mese_path 每次交叉验证的均方误差,随着alpha值的变化,均方误差的变化曲线
49mses = np.mean(lasso.mse_path_, axis=1)
50
51# 方法三:
52# 岭回归的线性回归模型
53from sklearn.linear_model import Ridge
54# (1)设置超参数搜索范围(默认超参数搜索范围)
55# 在Ridge(alpha= )设置alpha的值
56# (2)生成Ridge实例
57ridg10=Ridge()
58# (3)训练(内含CV)
59ridg10.fit(X_train,y_train)
三、降维(P188)
四、聚类(P210)
K均值聚类
使用K-均值聚类算法进行文本聚类
标签:机器,训练,模型,基础知识,学习,train,test,数据,lasso 来源: https://www.cnblogs.com/lx0113/p/16350756.html