人工智能学习 路线
google groups
http://www.captainbed.net/
https://segmentfault.com/a/1190000009887487
https://blog.csdn.net/q7695650/article/details/81331328
https://edu.51cto.com/center/course/lesson/index?id=280700
自己写 欧氏距离函数
"""欧氏距离 d = (x1 - x2)^2 + (y1 -y2)^2"""
def euclidean_distance(v1, v2, dims=2):
from functools import reduce
# return math.sqrt(reduce(lambda x,y:x+y,map(lambda t:pow(t[-1]-t[0],2),zip(v1,v2))))
return math.sqrt(sum(map(lambda t:pow(t[-1]-t[0],2),zip(v1,v2))))
以 向量 矩阵的 思维去考虑问题啊啊啊
# -*- coding: utf-8 -*-
__author__ = 'Frank Li'
import numpy as np
import matplotlib as mp
import matplotlib.pyplot as plt
import math
import pandas as pd
def create_dataset():
datasets = np.array([[8,4,2],[7,1,1],[1,4,4],[3,0,5]])
labels = ['非常热','非常热','一般热','一般热']
return datasets, labels
def analyze_data_plot(x,y):
fig = plt.figure()
# 将 画布 划分为 1 行 一列 一块
ax = fig.add_subplot(111)
ax.scatter(x,y)
# 设置散点图标题和横纵坐标
plt.title('游客冷热感知点的散点图')
plt.show()
def knn_Classifier(newV, datasets,label,k):
# 1 计算样本数据与样本库数据之间的距离
# 2 根据距离进行排序
# 3 针对 k个点 , 统计格格类别的数量
# 4 投票机制,少数服从多数原则,输入类别
pass
"""欧氏距离 d = (x1 - x2)^2 + (y1 -y2)^2"""
def euclidean_distance(v1, v2, dims=2):
if len(v1) != len(v2):
raise BaseException(' dims inconsistance, please check again')
from functools import reduce
# return math.sqrt(reduce(lambda x,y:x+y,map(lambda t:pow(t[-1]-t[0],2),zip(v1,v2))))
return math.sqrt(sum(map(lambda t:pow(t[-1]-t[0],2),zip(v1,v2))))
def top_k_distance(v1, v_bases,k=3):
res_list = []
for v_base in v_bases:
res_list.append((euclidean_distance(v1, v_base),v_base[-1]))
return sorted(res_list,key=lambda t:t[0],reverse=False)[:k]
def top_k_distance_2(v1, v_bases,labels, k=3):
v_bases_length = len(v_bases)
new_v1 = np.tile(v1,(v_bases_length,1)) # 构造一个新的矩阵去做减法运算
diff_matrix = new_v1 -v_bases
sqrt_diff_matrix = (diff_matrix**2).sum(axis=1)**0.5
sqrt_diff_df = pd.DataFrame(sqrt_diff_matrix, columns=['euclidean_distance'])
v_bases_df = pd.concat([pd.DataFrame(v_bases),pd.DataFrame(labels,columns=['label'])], axis=1)
ret_df = pd.concat([v_bases_df,sqrt_diff_df],axis=1).sort_values(by=['euclidean_distance'])
return ret_df[:k]
def group_by_result(df,label):
ret = df.groupby([label], as_index=False).size()
return ret.index[0]
if __name__ == '__main__':
datasets, labels = create_dataset()
print(datasets,'\n',labels)
analyze_data_plot(datasets[:,0],datasets[:,1])
# KNN 分类器
newV = [2,4,4]
# print(np.tile(newV,(4,1)))
# knn_Classifier(newV, datasets,label,2)
d = euclidean_distance([2,4],[8,2])
ret_df = top_k_distance_2(newV,datasets,labels)
print(ret_df)
print('预测结果:\n',group_by_result(ret_df,label='label'))
第一个问题, 工作的技能窃以为包括这么几个方面。一是编程基本功,要比较熟悉一门语言,如果没有基础,学python就行,写个简单的问题,或者简单的考察个数据结构看你对算法(当然这个不是机器学习的算法)复杂度的理解,注不注意数据结构各公司估计都不一定;二是机器学习理论知识的理解,包括几大主要算法(就那几种就ok,线性模型,决策树,svm,EM,集成方法更重要)的原理和应用场景,数据处理,特征工程和模型诊断(欠拟合、过拟合)等,未工作前有一些数据竞赛的项目经验是最好的,或者是自己做过公开的数据集,对神经网络等有一些了解也是很有必要的,不过面试时不一定考察;技能三,应该是对具体问题的分析能力,或者说针对一个实际场景的问题,如何提出模型建立的思路、解决方案(当然不是产品从上线到运营的方案,而是从数据处理,特征提取到模型构建的完整思路),这一点在工作经验不多或者未工作时,并不容易,也建议从数据竞赛中学习一个,毕竟数据竞赛的场景比较真实。
第二,关于学习路线,大道理不讲,个人推荐的路线是:
一期:吴恩达的ML课程(该课程没有配套书籍,可以看看其他入门书并行了解) + python语言入门,精学是你应该具备的基本功,否则你还报班去吧,ML课程的编程作业需要认真思考,吴大师中四五课讲神经网络的课程也是十分有益,所以这门课不能放过任何一个细节,另外python语言的学习是一个长期的过程,二期将继续;
二期:网上算法学习的视频(稍微找找就有,不用报班),推荐七月在线邹博的课程或者小象学院或者其他讲解算法原理的公开课,配套书籍李航大神的《统计学习方法》+ python 语言继续学习(做PTA上的练习题);解释一下,在一期,你对机器学习的概念应该了解了,基本的原理明白并且通过课后作业深入体会了ml的大致样子,在这一阶段,配套统计学习方法中对算法的深入剖析,听各种课程推导该书中主要的公式,这是十分艰难的阶段,学到什么样子不好说,但是课程和这本书啃一下很有必要,自己选择关键的学习内容,概率图模型初级阶段一般是不太重要的(或者说还不到时候),而决策树这样的吴大师的课程没有,需要多学习,一些关键的公式推导,面试中还是很可能考察的;另外,python如果是你的第一门语言,编程的基本功需要继续下功夫,多做题,如果学过其他语言,你应该知道怎么办的哈。
三期:开始实践,拿起练好的python,准备搞模型吧!有这样几种学习内容,一是看一些网上多得是的机器学习实践课程,二期的时候你可能也听了,都可以;二是跟着这种实践课程提供的数据集,或者比较有名的数据集按照教程开始整;三是找一些中低难度的数据竞赛,稍微体验一下数据处理、特征工程的过程,体验工业上用机器学习在解决什么问题,比如预测血糖(可以看我的微博),比如预测用户消费行为等,通过比分和排名,看到自己的差距,多使用一些方法去尝试。四是,此时需要你认真了解一下sklearn的工具包,numpy, pandas,可视化matplotlib等。
四期:此时希望你有工作了或实习了。。当然此时还可以学一些更多的东西。一是数据结构与算法(这个就够学一段时间了)并刷题,简单的掌握链表,树,查找和排序是十分必要的;二是深度学习的知识,更多了,由浅入深,建议有计划的学习,另起一条主线;三是爬虫,python的爬虫也很简单,也是将来的一项重要技能,建议学一学;四是一些很杂的东西,比如linux系统命令、shell编程、git工具、中文自然语言处理及文本向量化的一些知识。
自己的路线啰啰嗦嗦说完了,下面推荐几个介绍学习路线的博客:
人工智能之机器学习路线图
机器学习(Machine Learning)&深度学习(Deep Learning)资料
大量机器学习(Machine Learning)&深度学习(Deep Learning)资料
0. 三类问题 , 分类, 回归 , 聚类 (无监督学习) | 计算机视觉 (人脸识别, 车牌识别, 扫描文字识别, 图片内容识别, 图片搜索等) , 自然语言处理(搜索引擎智能匹配、文本内容理解、文本情绪判断,语音识别、输入法、机器翻译) , 社会网络分析(用户画像,网络关联分析,欺诈作弊发现,热点发现) , 推荐 (歌曲推荐, 猜你喜欢等等)
1 数学储备 --》 线代 (SVD ,PCA) , 微积分 (梯度下降法、牛顿法) , 数理统计与概率论 (极大似然, 贝叶斯模型 语言模型, 隐马尔科夫 因变量混合概率等)
2 典型算法
绝大多数问题用典型机器学习的算法都能解决,粗略地列举一下这些方法如下:
处理分类问题的常用算法包括:逻辑回归(工业界最常用),支持向量机,随机森林,朴素贝叶斯(NLP中常用),深度神经网络(视频、图片、语音等多媒体数据中使用)。
处理回归问题的常用算法包括:线性回归,普通最小二乘回归(Ordinary Least Squares Regression),逐步回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)
处理聚类问题的常用算法包括:K均值(K-means),基于密度聚类,LDA等等。
降维的常用算法包括:主成分分析(PCA),奇异值分解(SVD) 等。
推荐系统的常用算法:协同过滤算法
模型融合(model ensemble)和提升(boosting)的算法包括:bagging,adaboost,GBDT,GBRT
其他很重要的算法包括:EM算法等等。
hadoop
spark
如果有来生,一个人去远行,看不同的风景,感受生命的活力。。。