机器学习的分类:
监督学习:带标签
-
回归:连续
-
分类:离散
无监督学习 聚类:无标签,异常检测,降维
强化学习:试错
机器学习流程:
1.数据获取
2.数据清洗
3.特征工程
4.预处理
5.选择学习模型
6.
7.模型部署
数据预处理
特征提取:特征工程
处理缺失数据:均值、众数、聚类、丢弃
数据定标:归一化 \(\frac{x-min}{max-min}\) 、标准化 \(\frac{x-均值}{方差}\) 提升模型精度、收敛速度,改变稀疏性质
数据转换:取对数
大类吞小类的:将小类数据加入噪声添加到数据集中去
K最近邻(KNN)算法
适合低维空间
k一般选奇数 避免打平手
决策边界
交叉验证 在数据较少时提高fold,在计算量允许的情况下弥补数据不足
不能用测试数据来调参
数据量大的情况下使用 KD树 、Locality Sensitivity Hashing近似求解
如何处理数据相关性(?)
权重和距离有关
def knn_classify(X, y, testInstance, k):
distances = [euc_dis(x, testInstance) for x in X]#计算欧式距离
kneighbors = np.argsort(distances)[:k]#排序得到k个距离最近的邻居
count = Counter(y[kneighbors])#统计不同类型邻居出现次数
return count.most_common()[0][0]#取出现次数最多的类型
线性回归和逻辑回归
线性回归是利用线性方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的方法
线性回归的损失函数为凸函数,具有全局最优解。对损失函数求导(梯度法),使得损失函数的导数为0时,得到解析解。
逻辑回归解决二元(0/1)分类问题逻辑函数\(f(x)=\frac{1}{1+e^-x}\)
似然函数(?)
朴素贝叶斯:最适合简单的文本分析的算法
\(P(x|y)(后验)=\frac{P(y|x)(似然)*P(x)(先验)}{PI(y)(一般难计算)}\)
朴素:假设P(y1,y2,y3 ... |x)条件独立 P(y1,y2,y3 ... |x)=P(y1|x)P(y2|x)P(y3|x) ...
tfidf(w)=tf(d,w)idf(w) 词频权重
idf(w)=log \(\frac{N}{N(w)}\) N:文章总数 N(w):单词出现次数
避免分母N(w)为0 ,分母加1,分子加v
文本分类之 - 情感分析
MultinomialNB 适合向量为整数情况,高斯朴素贝叶斯适合实数但不适合稀疏矩阵
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
clf = MultinomialNB()
# 利用朴素贝叶斯做训练
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print("accuracy on test data: ", accuracy_score(y_test, y_pred))