个人理解的机器学习简单流程如下:
0.收集数据
1.对数据集进行预处理
2.划分数据集(训练集、测试集、验证集)
3.训练
4.验证模型
对每个步骤详细解释:
0.收集数据
可以使用之前学过使用爬虫对特定网页内容爬取,或在数据网页等信息网站上直接获得所需要的数据集。
1.对数据集进行预处理
对缺失数值进行处理
-1第一种方法是直接删除缺失值所在的样本。这个方法的缺陷是对于数据集比较小的,删除样本可能会对结果造成影响
-2填补处理
from sklearn.preprocessing import LabelEncoder
labelencoder = LabelEncoder()
x[:,1] = labelencoder.fit_transform(x[:,1])
print(x)
关于Imputer参数:
1. missing_value :标记哪些是缺失值,匹配作用位置
2. strategy :处理的策略:mean 是取平均值 | median是取中位数 | most_frequent是取出现频率最高进行替换
3. axis 是策略作用的范围,0表示在缺失那一列应用策略,然后取代,1则是在行应用策略
2.划分数据集(训练集、测试集、验证集)
-交叉验证法
from sklearn import datasets
from sklearn.model_selection import KFold, RepeatedKFold
from sklearn.linear_model import LogisticRegression #导入逻辑回归分类算法
from sklearn.metrics import accuracy_score
data = datasets.load_iris() #导入数据集
X = data['data']
y = data['target']
clf = LogisticRegression(solver='newton-cg') #设置优化方法为牛顿法
k_fold = 10 #设置为10折划分
kf = KFold(n_splits=k_fold)
averg_score = 0
for train_index, test_index in kf.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
averg_score += accuracy_score(y_test, y_pred)
print("%d折交叉验证的准确率的平均值为%f"%(k_fold, averg_score / k_fold))
averg_score = 0
repeats_num = 10
rkf = RepeatedKFold(n_splits=k_fold, n_repeats=repeats_num)
for train_index, test_index in rkf.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
averg_score += accuracy_score(y_test, y_pred)
averg_score = averg_score / (repeats_num * k_fold)
print("%d次%d折交叉验证的准确率的平均值为%f"%(repeats_num, k_fold, averg_score))
-留出法
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC #导入支持向量机分类算法
from sklearn.metrics import accuracy_score
data = datasets.load_iris() #导入数据集
X = data['data']
y = data['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3) #对数据集进行划分
clf = SVC()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(accuracy_score(y_test, y_pred)) #打印准确率
3.训练
输入层,输出层,隐层
名词和内容:
>随机初始化:所有权值都初始化为0(或者说初始化为相同的值)是不合适的,这就是所谓的对称权重问题;因此需要对权重进行随机初始化,将每个参数都初始化为某一个闭区间内的随机数。
>损失函数:损失函数(loss function)就是用来度量模型的预测值f(x)与真实值Y的差异程度的运算函数,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。
均方误差损失函数(MSE)、L2损失函数、 L1损失函数
参考文献:损失函数(Loss Function) - 知乎 (zhihu.com)
>优化器:
4.验证模型
常用P-R曲线,ROC曲线、AUC等作为评价指标。
用matplotlib画图,验证模型的泛化性能