python&数据分析&机器学习基础入门
2024-09-16 20:13:01 0 举报
AI智能生成
本人因工作需要,从0开始学习数据分析和机器学习的学习笔记。重点浓缩了《利用python进行数据分析》(第二版、第三版)、《机器学习基础教程》两本书,结合scikit-learn官方文档及其他视频、搜索、实践中整理的知识,按此路径学习可以快速上手应用各基础算法,并了解各种算法在不同场景下的优劣点,可以实际应用解决问题。
作者其他创作
大纲/内容
1、数据科学导论
数据科学概念与应用
python语法
一些小技巧
将数值"四舍五入"到最近的0.5: round(x*2)/2
计算两个数差值的符号位(-1,0,1)
(a > b) - (a < b)
np.sign
只有0和1的数据集,其均值就是1的占比
数据结构与算法
蓄水池抽样算法(Reservoir Sampling)
数学
统计
众数
正态分布
标准差
泊松分布
https://blog.csdn.net/ccnt_2012/article/details/81114920
方差
峰度
偏度
线性代数
矩阵的维数即行数×列数
向量是一种特殊的矩阵,分为行向量和列向量
乘法
矩阵乘向量
矩阵乘矩阵:m x n矩阵乘以n x o矩阵变成m x o矩阵
不满足交换率 A*B != B*A
单位矩阵(I或者E):左上到右下均为1,其余为为0
逆矩阵:相乘为单位矩阵
常识
对数
自然对数
基础库
Numpy
ndarray
类型一致
多维数组
切片
应用
矢量运算
np.nan as NA
随机数生成
reshape(-1, 1)
合并
变成一维数组
ravel
flatten
方法
np.insert
np.append
np.bincount
np.repeat
去重计数:np.unique(arr, return_counts=True)
np.clip 限定值的范围,将数值约束在一定范围内
实践
计算一个ndarray中True和False的个数,分一维和多维
pandas
read
read_csv
主要属性
read_excel
read_json
read_sql
其他
其他接口
Serise
创建
列表
默认索引
pd.Series([4, 7, -5, 3])
指定索引
pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
字典
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = pd.Series(sdata)
obj3 = pd.Series(sdata)
访问
索引访问
s[0]
s['a']
s[['a', 'b', 'd']]
切片访问
s[:4] #返回0-3
s['b':'d'] #返回b、c、d
布尔访问
s[s > 1]
属性
values
ndarray([ 4, 7, -5, 3])
index
RangeIndex(start=0, stop=4, step=1)
index.name
索引自对齐
obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
传入指定列表重新排序,不能对齐的值为NA
get_indexer(s2)
name
方法
isnull()
rank
rank(ascending=False, method='max')
unique()
value_counts()
isin
前一行与后一行的差diff()
计算
直接进行加减乘除,作用在每一个元素上
DataFrame
创建
data
ndarray, dict等
index
指定索引列,默认为RangeIndex
columns
指定列名,默认为RangeIndex
访问
字典标记
df['col'], df[[cols]]
位置访问
loc:基于标签label(索引的字面量).loc[0] 0不存在则报错
多层索引访问
iloc:基于位置pos(位置的相对index).iloc[0] 取第一行数
修改
按列赋值:df['col'] = a
a=常量
a=序列(长度相同)
a=Serise(会索引对齐,不要求长度相同)
删除列
del df['col']
df.drop(axis='columns', inplace=True)
属性
values
ndarray
索引
index
columns
方法
reindex
重构索引或插值
图5.4??
map
apply
数组级函数映射,Axis指定方向
axis 默认0每一列;1为每一行
applymap
元素级函数映射
sort_index
sort_values
groupby
重要代码
分组计数
size
count
.transform
.apply
重命名:rename
定位
idmax
idmin
找存在空值的列:df.isnull().sum().loc[lambda x: x > 0]
找到某行前后行的数据
计算
与Series计算
统计
累积
cumsum
cumcount
函数
mean
sum
pct_change
方差、标准差、协方差、相关系数
应用
时间序列
分组聚合
绘图
绘图
matplotlib
散点图
直方图
pandas
数据集
癌症数据集
波士顿房价
2、数据预处理与清洗
数据清洗
缺失值处理
找到缺失值
isnull, notnull
填充:data.fillna
指定值填充
均值填充
0填充
中位数填充
众数
前后填充
其他算法填充
用同样本同组的非空值填充
各种填充方法适用的场景
删除:data.dropna
Series
DataFrame
重复数据处理
判断重复:duplicated
删除重复:drop_duplicates
异常值处理
怎么识别?
简单处理
数据转换
字典映射
替换值
索引替换
数据预处理
特征缩放
标准化
标准化方法
归一化
Scikit-learn
方法类
MinMaxScaler
StandardScaler
RobustScaler
Normalizer
数据切分
80%训练集
20%测试集
降维
数据平衡
样例代码
分箱\离散化\bin
简述
卡方分箱:https://blog.csdn.net/GreenYang5277/article/details/106407874/
利用无监督学习进行变换
什么是特征
特征种类
特征工程
3、特征工程与数据探索
特征工程
离散特征
LabelEncoder
分类特征/离散特征,字典值映射
数值编码,123
OnehotEncoder虚拟变量
pandas 的 get_dummies
sklearn 的 OneHotEncoder
二值特征
连续特征及其扩展
分箱\离散\bin
交互特征
原始数据+原始数据的分箱
多项式特征
多项式回归
单变量非线性变换
log:降低偏度,构造正态分布
log(y + 1)
BOX-COX
对数变换为什么能构造正态分布?
exp
sin\cos
日期特征
文本特征
nltk
以后再说
自动化选择特征
单变量统计(univariate statistics)
选择固定个数:SelectKBest
选择固定百分比:SelectPercentile
基于模型的选择(model-based selection)
线性模型的L1正则
随机森林选择特征
迭代选择(iterative selection)
递归特征消除(recursive feature elimination,RFE)
特征评估
eli5
特征重要性评估
pdpbox
评估一个模型对一个特征有多敏感.
WOE和IV
WOE (Weight of Evidence)
对数变换
IV (Information Value)
先验经验
利用专家知识
常识
时序数据
Granger因果性检验
子主题
数据探索性分析(EDA)
资料
文章
发现一个强大的库 ydata-profiling
方法
PCA
主成分分析(PCA)
样例代码
特征提取
图像处理
whiten=True 白化是什么?
非负矩阵分解(NMF)
特征提取
降维
可视化
t-SNE
4、机器学习算法入门
几个简单能找到自信的模型入门
概念
假设
对训练集拟合的函数
损失函数/代价函数
描述模型拟合的预测值与训练集实际值之间的差异程度,模型的参数为自变量,误差值(误差的平方和)为应变量
梯度下降
通过尝试不同的参数组合,使得损失函数的值最小(收敛)
特征缩放到-1和1之间能加快收敛
学习率
可以理解为梯度下降每次调整的步长,过小则迭代次数非常高,过大可能导致每次迭代不会减小代价函数,导致无法收敛
正规方程?
过拟合(overfitting)
1、丢弃一些特征:PCA
2、正则化
通过引入一个系数,是的模型拟合出来的参数对整体的影响变小
欠拟合(underfitting)
泛化(generalize)
分类
二分类
多分类
回归
监督学习
K近邻
回归
分类
优点、缺点和参数
线性模型
回归
线性回归(普通最小二乘法)
以下划线结尾的变量
是训练出来的结果
是训练出来的结果
系数:lr.coef_
截距:lr.intercept_
容易过拟合
解决办法:使用带正则化的模型
岭回归
L2正则化
参数
alpha
Lasso
L1正则化
参数
alpha
max_iter 最大迭代次数
原理
代价函数
Logistic 回归
原理
代价函数
简化
梯度下降
如果我们要最小化这个关于θ的函数值,
这就是我们通常用的梯度下降法的模板。
这就是我们通常用的梯度下降法的模板。
我们要反复更新每个参数,
用这个式子来更新,
就是用它自己减去学习率α乘以后面的微分项。
求导后得到:
用这个式子来更新,
就是用它自己减去学习率α乘以后面的微分项。
求导后得到:
emm:
参数
正则化系数:C
求解器:solver
lbfgs
sag
saga
newton-cg
惩罚函数:penalty
l1
l2
最大迭代次数:max_iter
多分类
一对其余,预测时对多个模型代入x,输出得到值最大的一个分类
线性支持向量机
多分类
总结
朴素贝叶斯
特征
速度比线性模型快
泛化能力比线性分类稍差
分类器
GaussianNB
BernoulliNB
alpha
MultinomialNB
alpha
树
决策树
可以用于回归
容易过拟合
预剪枝
参数
max_depth
max_leaf_nodes
min_samples_leaf
后剪枝/剪枝
分析决策树
可视化
export_graphviz
tree.feature_importances_
决策树集成
随机森林(random forest)
参数
n_estimators
max_features
n_jobs=-1
random_state
RandomForestClassifier 没有 decision_function,只有 predict_proba
梯度提升决策树(gradient boosted decision tree, GBDT)
参数
learning_rate(学习率)
n_estimators
预剪枝
max_depth
特征重要性(不叫权重)
model.feature_importances_
XGBoost
超详细解析XGBoost:https://zhuanlan.zhihu.com/p/562983875
核支持向量积(SVM)
参数
gamma
C
分类
线性支持向量机(LinearSVC)
参数
dual
“一对其余”与决策边界示例
SVC
决策函数:svc.decision_function(X_test)
回归
svm.LinearSVR
svm.SVR
处理无限多个特征?
神经网络
先缓缓,学不动了。。。
评分(.score)
回归
分类
学习曲线
例子
分类器的不确定度估计
无监督学习
无监督变换(unsupervised transformation)
降维
聚类算法(clustering algorithm)
其他一些看到待学习的
xgboost
*3
GBDT
*2
LightGBM
Bagging
多元回归
卷积神经网络CNN
LSTM
时序数据
ARIMA:https://blog.csdn.net/fengdu78/article/details/121347188
ARIMAX
向量自回归(VAR)https://blog.csdn.net/qq_42374697/article/details/106294970
5、模型评估与调优
模型选择
交叉验证:评估泛化能力
k 折交叉验证(k-fold cross-validation)
分层 k 折交叉验证(stratified k-fold cross-validation)
划分方法:交叉验证分离器(cross-validation splitter)
KFold k折交叉验证(回归模型默认)
StratifiedKFold 分层k折交叉验证(分类默认)
LeaveOneOut 留一法交叉验证
ShuffleSplit 打乱划分交叉验证
StratifiedShuffleSplit
GroupKFold 分组交叉验证
结果取平均
网格搜索(grid search):找到最佳参数,提升泛化性能
基础
for循环多个参数,找到最佳参数组合,存在过拟合泛化性能差的风险
训练集、验证集、测试集
训练集:构建模型
验证集:选择参数
测试集:评估模型
结合交叉验证的网格搜索
带交叉验证的网格搜索:GridSearchCV【网格搜索(交叉验证())】
例:SVC
默认内核,仅参数变动
内核变动
对分类问题默认使用分层 k 折交叉验证,对回归问题默认使用 k 折交叉验证。
嵌套交叉验证(nested cross-validation)
交叉验证(网格搜索(交叉验证()))
分析交叉验证结果
网格搜索热力图
极其耗资源,spark-sklearn分布式执行
使用Pipeline
模型选择时指定评分指标
GridSearchCV
cross_val_score
scoring 参数
分类
回归
评估指标与评分
基本精度(accuracy)
score
分类
准确率函数
np.mean
knn.score
回归
二分类
概念
正类(positive class)
反类(negative class)
假正例(false positive)
第一类错误(type I error)
假反例(false negative)
第二类错误(type II error)
不平衡数据集(imbalanced dataset)
混淆矩阵(confusion matrix)
混淆矩阵怎么看?
准确率(查准率)
召回率(查全率)
f1-分数(f1-score)
分类报告:同时查看准确率、召回和f1
不确定性与决策阈值调整
svc.decision_function
predict_proba
模型校准
工作点(operating point)
准确率 - 召回率曲线(precision-recall curve)
平均准确率
ROC 曲线(ROC curve)
假正例率(false positive rate,FPR)
AUC分数(ROC曲线下的面积)
代价敏感错误率和代价敏感曲线
需要再学习
多分类
精度
混淆矩阵
热力图
分类报告 classification_report
不平衡数据集: f-分数
“宏”(macro)平均
“加权”(weighted)平均
“微”(micro)平均
回归
默认的score方法给出R2评分就够了
算法链与管道
将特征工程与模型构建为一个pipeline,前一步的输出是下一步的输入,简化代码,减少人为错误,解决网格搜索中的训练集和验证集问题
利用元组构建
from sklearn.pipeline import Pipeline
pipe = Pipeline([("scaler", MinMaxScaler()), ("svm", SVC())])
pipe = Pipeline([("scaler", MinMaxScaler()), ("svm", SVC())])
make_pipeline
from sklearn.pipeline import make_pipeline
pipe_short = make_pipeline(MinMaxScaler(), SVC(C=100))
pipe_short = make_pipeline(MinMaxScaler(), SVC(C=100))
6、深度学习基础
7、实战项目与案例分析
资料库
资料
机器学习
机器学习基础教程:https://www.ituring.com.cn/book/tupubarticle/19667?bookID=1915
吴恩达课程
笔记:http://www.ai-start.com/ml2014/
视频:https://www.bilibili.com/video/BV164411b7dx
精简笔记:https://zhuanlan.zhihu.com/p/353905922
机器学习实战:https://hands1ml.apachecn.org/
机器学习-周志华(西瓜书)
统计学习方法-李航
深度学习
动手深度学习:https://zh.d2l.ai/index.html
图书
https://www.zhihu.com/tardis/zm/art/671160298?source_id=1005
深度学习(花书):https://book.douban.com/subject/27087503/
python、数据结构算法
利用python进行数据分析
第二版:https://seancheney.gitbook.io/python-for-data-analysis-2nd
第三版:https://wesmckinney.com/book/
hello算法:https://www.hello-algo.com/
库
sklearn:https://scikit-learn.org/stable
数据探索工具
RATH
特征提取
常用特征提取方法以及实战方法精讲 https://www.bilibili.com/video/BV1wu4y1z7RA
实践笔记
收藏
0 条评论
下一页