机器学习-学习笔记
2024-07-04 18:24:43 0 举报
AI智能生成
机器学习是一种使计算机系统在没有明确编程的情况下自动学习和改进的方法。核心内容包括监督学习、无监督学习以及强化学习等。监督学习通过标记训练数据预测新实例,而无监督学习则通过发现数据中的结构或模式来进行学习。强化学习则是机器学习的一种,通过试错来提高其在特定任务中的性能。文件类型主要涉及数据文件和模型文件等,包括.csv、.xlsx、.txt、.json等。修饰语包括自学、自适应、智能化等,这些都体现了机器学习的能力和特性。
作者其他创作
大纲/内容
机器学习关键代码(Scikit - learn)
标准化/归一化
标准化
公式
( x - np.mean ) / (np.std)
导入库
from sklearn.preprocessing import StandardScaler
代码
std_scaler = StandardScaler() # 创建对象
results = std_scaler.fit_transform(df_work['列名'])
print(results) # 其结果是一个numpy array
results = std_scaler.fit_transform(df_work['列名'])
print(results) # 其结果是一个numpy array
归一化
公式
(x - min) / (max - min)
导入库
from sklearn.preprocessing import MinMaxScaler
代码
mmx_scaler = MinMaxScaler()
df_work['列名'] = mmx_scaler.fit_transform(df_work['列名'])
df_work.head()
df_work['列名'] = mmx_scaler.fit_transform(df_work['列名'])
df_work.head()
基础填充
data[x].fillna(data[x].mode().iloc[0], inplace = True)(以众数填充)
数值化
OrdinalEncoder
导入库
from sklearn.preprocessing import OrdinalEncoder
代码
encoder = OrdinalEncoder()
encoder.fit(df.loc[:, ['学历要求','工作经验']]) # 即使只有1个列,也必须将列名写在[]中
data_encoded = encoder.transform(df.loc[:, ['学历要求','工作经验']])
df['学历要求_ordinal'] = data_encoded[:, 0]
df['工作经验_ordinal'] = data_encoded[:, 1]
encoder.fit(df.loc[:, ['学历要求','工作经验']]) # 即使只有1个列,也必须将列名写在[]中
data_encoded = encoder.transform(df.loc[:, ['学历要求','工作经验']])
df['学历要求_ordinal'] = data_encoded[:, 0]
df['工作经验_ordinal'] = data_encoded[:, 1]
OneHotEncoder
导入库
from sklearn.preprocessing import OneHotEncoder
代码
encoder = OneHotEncoder()
encoder.fit(df.loc[:, ['学历要求']]) # 即使只有1个列,也必须将列名写在[]中
data_onehot = encoder.transform(df.loc[:, ['学历要求']]).toarray() # 使用toarray获得转换以后的OneHot编码数组
encoder.fit(df.loc[:, ['学历要求']]) # 即使只有1个列,也必须将列名写在[]中
data_onehot = encoder.transform(df.loc[:, ['学历要求']]).toarray() # 使用toarray获得转换以后的OneHot编码数组
调优
导入库
from sklearn.model_selection import GridSearchCV
代码
param_grid = {'learning_rate': [0.1 0.01],
'max_depth': [2, 4],
'min_samples_leaf': [5, 9],
'max_features': [1.0, 0.8]
}
# 实例化gbm分类模型gbm_2
gbm_2 = GradientBoostingClassifier(n_estimators=3000)
# 实例化GridSearchCV并执行训练
gbm_gs = GridSearchCV(gbm_2, param_grid, cv=10).fit(train_X, train_y)
'max_depth': [2, 4],
'min_samples_leaf': [5, 9],
'max_features': [1.0, 0.8]
}
# 实例化gbm分类模型gbm_2
gbm_2 = GradientBoostingClassifier(n_estimators=3000)
# 实例化GridSearchCV并执行训练
gbm_gs = GridSearchCV(gbm_2, param_grid, cv=10).fit(train_X, train_y)
划分数据集和验证集
导入库
from sklearn.model_selection import train_test_split
代码
data_X, val_X, data_y, val_y = train_test_split(dataX, dataY, test_size=(划分比例),random_state = (随机状态))
算法
决策树
导入库
from sklearn import tree
代码
clf = tree.DecisionTreeClassifier(random_state = 1)
clf = clf.fit(data_X, data_y)
clf.score(val_X, val_y)
clf = clf.fit(data_X, data_y)
clf.score(val_X, val_y)
随机森林
导入库
from sklearn.ensemble import RandomForestClassifier
代码
rf = RandomForestClassifier(random_state=1)
rf = rf.fit(train_X, train_y)
a = rf.predict(val_X) #预测
accuracy1 = accuracy_score(val_y, a) #正确率
accuracy1
rf = rf.fit(train_X, train_y)
a = rf.predict(val_X) #预测
accuracy1 = accuracy_score(val_y, a) #正确率
accuracy1
GBM
导入库
from sklearn.ensemble import GradientBoostingClassifier
代码
gbm = GradientBoostingClassifier(random_state=1, n_estimators = 1000, learning_rate = 0.1, max_depth = 3, min_samples_leaf = 6)
gbm = gbm.fit(train_X, train_y)
b = gbm.predict(val_X)
score = accuracy_score(val_y, b)
print(score)
gbm = gbm.fit(train_X, train_y)
b = gbm.predict(val_X)
score = accuracy_score(val_y, b)
print(score)
XGboost
导入库
from xgboost import XGBClassifier
代码
xgb = XGBClassifier(learning_rate=0.1, n_netimators = 1000, max_depth=7, min_child_weight = 1, scale_pos_weight=1, random_state=2, min_samples_leaf = 6)
xgb.fit(train_X, train_y)
xgb.score(val_X, val_y)
xgb.fit(train_X, train_y)
xgb.score(val_X, val_y)
LightGBM
导入库
from lightgbm import LGBMClassifier
代码
lgm = LGBMClassifier(learning_rate = 0.1, n_estimators = 1000, max_depth = 6, min_samples_leaf = 7, num_leaves = 20)
lgm.fit(train_X, train_y)
lgm.score(val_X, val_y)
lgm.fit(train_X, train_y)
lgm.score(val_X, val_y)
K-means(聚类算法)
导入库
from sklearn.cluster import KMeans
代码
kmeans_model = KMeans(n_clusters=3(K), random_state=9)
kmeans_model.fit(iris_X_train)
kmeans_model.predict(iris_X_test)
kmeans_model.fit(iris_X_train)
kmeans_model.predict(iris_X_test)
寻找最优k值
# KMeans算法实例化,将其设置为K=range(2,6),random_state=123
d = {}
fig_reduced_data = plt.figure(figsize= (12,12))
for k in range(2,6):
# KMeans算法实例化
kmeans_model = KMeans(n_clusters=k, random_state=123)
# 训练集聚类
kmeans_model.fit(iris_X_train)
# 训练集的预测标签
label = kmeans_model.predict(iris_X_train)
# 估不同k值聚类算法效果
score = metrics.calinski_harabasz_score(iris_X_train,label)
d.update({k:score})
print('calinski_harabaz_score with k={0} is {1}'.format(k,score))
d = {}
fig_reduced_data = plt.figure(figsize= (12,12))
for k in range(2,6):
# KMeans算法实例化
kmeans_model = KMeans(n_clusters=k, random_state=123)
# 训练集聚类
kmeans_model.fit(iris_X_train)
# 训练集的预测标签
label = kmeans_model.predict(iris_X_train)
# 估不同k值聚类算法效果
score = metrics.calinski_harabasz_score(iris_X_train,label)
d.update({k:score})
print('calinski_harabaz_score with k={0} is {1}'.format(k,score))
逻辑回归(本质是分类问题)
线性回归(LinearRegression)
导入库
from sklearn.linear_model import LinearRegression
代码
tr = LinearRegression()
tr = tr.fit(data_X, data_y)
val_pred = tr.predict(val_X)
val_pred
tr = tr.fit(data_X, data_y)
val_pred = tr.predict(val_X)
val_pred
关于词的
分词方法preprocess
导入库
from nltk.tokenize import TweetTokenizer
代码
# 实例化TweetTokenizer方法
tokenizer = TweetTokenizer()
# 使用TweetTokenizer方法中tokenize函数进行文本分词处理,处理前使用lower()函数首先将文本转换为小写。
preprocess = lambda text: ' '.join(tokenizer.tokenize(text.lower()))
tokenizer = TweetTokenizer()
# 使用TweetTokenizer方法中tokenize函数进行文本分词处理,处理前使用lower()函数首先将文本转换为小写。
preprocess = lambda text: ' '.join(tokenizer.tokenize(text.lower()))
词袋模型
导入库
from sklearn.feature_extraction.text import CountVectorizer
代码
# 实例化CountVectorizer方法,min_df参数设置为1
vectorizer = CountVectorizer(min_df=1)
# 基于text_train数据训练词袋模型
vectorizer.fit(texts_train)
# 使用已训练的词袋模型完成对texts_train,texts_test的特征抽取
X_train_bow = vectorizer.transform(texts_train)
X_test_bow= vectorizer.transform(texts_test)
vectorizer = CountVectorizer(min_df=1)
# 基于text_train数据训练词袋模型
vectorizer.fit(texts_train)
# 使用已训练的词袋模型完成对texts_train,texts_test的特征抽取
X_train_bow = vectorizer.transform(texts_train)
X_test_bow= vectorizer.transform(texts_test)
词云(画图查看哪个词频高)
导入库
from wordcloud import WordCloud
from matplotlib import pyplot as plt
%matplotlib inline
from matplotlib import pyplot as plt
%matplotlib inline
代码
def cloud(text, title, size = (10,7)):
"""
输入是文本list,图片标题
"""
wordcloud = WordCloud(width=800, height=400, collocations=False).generate(" ".join(text))
fig = plt.figure(figsize=size, dpi=80, facecolor='k',edgecolor='k')
plt.imshow(wordcloud,interpolation='bilinear')
plt.axis('off')
plt.title(title, fontsize=25,color='w')
plt.tight_layout(pad=0)
plt.show()
# 使用cloud函数绘制词云图
cloud(texts, "word cloud of comments")
"""
输入是文本list,图片标题
"""
wordcloud = WordCloud(width=800, height=400, collocations=False).generate(" ".join(text))
fig = plt.figure(figsize=size, dpi=80, facecolor='k',edgecolor='k')
plt.imshow(wordcloud,interpolation='bilinear')
plt.axis('off')
plt.title(title, fontsize=25,color='w')
plt.tight_layout(pad=0)
plt.show()
# 使用cloud函数绘制词云图
cloud(texts, "word cloud of comments")
评估模型(计算预测)
预测结果
predict(val_X)
预测概率
predict_proba(val_X)
评估模型(计算准确率、召回率)
导入库
from sklearn.metrics import roc_auc_score, accuracy_score, r2_score
代码
accuracy = accuracy_score(val_y, val_pred) (分类问题的正确率) / accuracy = roc_auc_score(val_y, val_pred)(分类问题的召回率)/ r2_score = r2_score(test_y, test_predict) (回归问题的正确率)
评测指标
导入库
import numpy as np
from sklearn import metrics
from sklearn.metrics import mean_squared_error
from sklearn import metrics
from sklearn.metrics import mean_squared_error
各类误差代码
均方误差(MSE)
mean_squared_error(val_y, val_pred)
均方根误差(RMSE)
np.sqrt(mean_squared_error(val_y, val_pred))
平均绝对误差(MAE)
metrics.mean_absolute_error(val_y, val_pred)
平均绝对百分误差(MAPE)
np.mean(np.abs((y_pred - y_true) / y_true))
中值绝对误差(MAD)
metrics.median_absolute_error(val_y, val_pred)
回归决定系数
metrics.r2_score(val_y, val_pred)
数据分析与应用
pandas 统计分析
文件读取与存储
csv文件
读取
pandas.read_csv( filepath , sep = ',' (分隔符为逗号 ), header = 'infer' (将某行数据最为列名),names = None (自定义列名), index_col = None(表示索引列的位置), nrows = None (读取前几行), chunksize = 数值(对于大数据的读取))等
例如:pd.read_csv(r"C:\Users\Lenovo\Desktop\文件\data.csv") (最基础)
储存
pandas.to_csv(path = None, sep = ',' , columns = None (表示写出的列名) , header = True (是否写出列名), index = True (是否将行名写出), index_label = None (索引名) , mode = 'w ' (数据写入模式(默认值为w)))等
例如:pd.to_csv(r"C:\Users\Lenovo\Desktop\文件\data.csv") (最基础)
Excel文件
读取
pandas.read_excel(扩展名有 .xls 和 .xlsx 两种, sheetname = 0 (代表Excel表内数据的分表位置), header = 0 )等
例如:pd.read_excel(r"C:\Users\Lenovo\Desktop\文件\data.xls或.xlsx") (最基础)
储存
pandas.to_excel(excel_writer = None, sheetname= 0, header = True, index = True, index_label = None, mode = 'w')
例如:pd.to_excel(r"C:\Users\Lenovo\Desktop\文件\data.xlsx") (最基础)
读取位置
head() (读取前几行(默认值参数为5行))
tail() 读取后几行
encoding(编码类型)
utf-8 全球通用编码类型 (内存大)
gbk 汉语编码类型(内存小)
基础操作
基础函数
columns 查找列名
index 查找index
values 查找值
dtypes 查询类型
size 查询元素个数
ndim 获取数据维度
shape 获取数据形状
loc [行索引名称或条件, 列索引名称] 在行索引前加 ~ 符可以筛选相反数据
iloc [行索引位置, 列索引位置]
info() 用于获取 DataFrame 的简要信息
describe(include = 'all') 用于获取 DataFrame 较多值的计算 参数include = 'all' 可获取更多数据
描述性统计
corr 相关系数函数
基于相关性结果做变量选择
选择与y相关性高的因子,同时互相关性低的因子
代码 :sns.heatmap(corr_df)
value_counts() 对频数进行统计 (该数据有几种数据和每种数据的数量)
var() 方差
median() 中位数
mean() 平均值
max() 最大值
min() 最小值
std() 标准差
mode() 众数
count() 非空值数目
quantile() 四分位数
遍历dataframe
apply + 自定义函数
缺失值检查
iterrows
元组
index
row(serise)
for index, row in a1.iterrows(): #返回的是元组
print(index, row['Gender'])
print(index, row['Gender'])
分组统计/数据透视表
pivot_table
values
列表,元素是列名
index
列表,元素是列名
aggfunc
字典,元素“列名”:[函数1, 函数2]
样例代码
代码
import numpy as np
g = a1.pivot_table(values = ['LoanAmount', 'ApplicantIncome'],
index = ['Gender', 'Married', 'Self_Employed'],
aggfunc ={'LoanAmount':np.mean, 'ApplicantIncome':[np.sum,np.mean]})
pd.DataFrame(g)
g = a1.pivot_table(values = ['LoanAmount', 'ApplicantIncome'],
index = ['Gender', 'Married', 'Self_Employed'],
aggfunc ={'LoanAmount':np.mean, 'ApplicantIncome':[np.sum,np.mean]})
pd.DataFrame(g)
groupby()
groupby('列名')
返回的是一个group的类型
groupby().agg({'列1': 'mean', 'age': 'max'})
代码:data.groupby('company').agg({'salary': 'median', 'age': 'mean'})
返回的是dataframe
groupby(). apply()
传递给自定义函数的是dataframe
代码
def func1(x):
print(type(x))
print(x)
data.apply(func1)
print(type(x))
print(x)
data.apply(func1)
注意事项: groupby创建完之后返回的是一个对象
crosstab
列Series, 可以用列表保存多列
列Series, 可以用列表保存多列
margins
是否统计总数
normalize
是否求比例
样例
pd.crosstab(a1['Credit_History'],[a1['Gender'],a1['Loan_Status']],margins=True, normalize = True)
合并数据集
merge
right =
join
left_on/right——on
列名是否要一致? 否
列的内容是可以mou定
left_index/right_index
True/False
concat
默认index列进行合并
[表1, 表2, 表3 .......]
axis = 1或0
1: 列合并
0:行合并
join
排序
sort_values
ascending = True/False (升序/降序)
变量离散化
pd.cut
列, series
bins = [...](划分区间)
labels
right
(9, 90) 不包括90值
(9, 90]包括90值
样例
pd.cut(x (一维数组) , bins (整数--将x划分为多少个等距的区间.若不在该序列中,则是Nan) , right=True (是否包含右端点),labels=None (是否用标记来代替返回的bins), precision=3 (精度) ,include_lowest=False (是否包含左端点))
独热编码
get_dummies
列, series
prefix = ' ' (建议是与原列名一致)
堆叠合并数据
concat 方法堆叠数据
pandas.concat(objs (参与连接pandas对象列表的组合), axis = 0 (连接的轴向), join = ' outer ' (按交际(inner)或并集(outer)进行合并),
ignore_index = False (表示是否不保留连接轴上的索引), keys = None (层次化索引), levels = None (在确定keys后用于层次化各级别上的索引),
names = None (在确定keys和leves后,用于创建分层级别名称), verify_integrity = False (是否检查连接轴上的重复项))
ignore_index = False (表示是否不保留连接轴上的索引), keys = None (层次化索引), levels = None (在确定keys后用于层次化各级别上的索引),
names = None (在确定keys和leves后,用于创建分层级别名称), verify_integrity = False (是否检查连接轴上的重复项))
append 方法堆叠数据
pandas.DataFrame.append(self, other (要添加的新数据), ignore_index = Fasle (表示是否不保留连接轴上的索引),verify_integrity = False (是否检查连接轴上的重复项))
变量映射
replace
replace(['a','b','c'],['A','B','C'])
Matplotlib 数据可视化/seaborn
工具包及基本参数设置
导入库
import matplotlib.pyplot as plt / import seaborn as sns
画布与子图
创建画布大小、像素
plt.figure( figsize = (长, 宽) , dpi = (像素))
创建子图
figure(画布).add_subplot(2, 1 , 1) (创建一个2行1列的子图 这是绘制第一个)
标签与图例
添加标题
plt.title()
添加x/y轴名称
plt.xlabel() / plt.ylabel()
指定当前x/y轴数据范围
plt.xlim()/plt.ylim()
指定x/y轴刻度与取值
plt.xticks()/plt.yticks()
图例
plt.legend()
保存与显示图形
保存
plt.savafig()
显示图形
plt.show()
基础构图
柱状图
plt.bar(left (x轴数据), height (x轴所代表的的数据数量0, color = None (柱状图颜色),width = 0.8 (柱状图宽度 默认值 0.8))
直方图
基础代码:data['列名'].plot.hist()
折线图
plt.plot(x , y , linestyle = '-' (线条类型 默认值 ' - ' ),marker = None (点类型), alpha = None (透明度 0~1的小数), color = None (折线图颜色))
散点图
plt.scatter(x , y , s = None (点的大小), c = None (点的颜色), marker = None (点的形状), alpha = None (点的透明度 0~1的小数))
饼图
plt.pie(x, explode = None (表示指定项距圆心的半径), labels = None (每一项的名称) , colors = None (饼图颜色), autopct = None (数值的显示方式) , pctdistance = 0.6 (每一项的比例autopct和距离圆心的半径) , labeldistance = 1.1 (指定每一列的名称labels和距离圆心的半径) , radius = 1 (饼图的半径) )
横柱图
plt.barh(y (条形的y轴坐标) , width (条形的宽度), height=0.8 (条形的高度,默认值0.8))
箱线图
sns.boxplot(data , y , x , widths (箱线图宽度), showmeans (是否显示均值) , showbox (是否显示箱体), sym (异常点形状), positions (放在x轴位置) , vert (是否垂直放置箱体))
热力图
sns.heatmap(data (数据corr()结果), vmin (颜色最小值), vmax (颜色最大值), center (色彩中心对称), square = False (矩阵小块的形状) , annot = True (是否标注))
小提琴图
代码
fig, ax = plt.subplots(1, 3, figsize = (16, 6))
sns.violinplot(x="feature_1", y="target", data=train, ax=ax[0], title='feature_1')
sns.violinplot(x="feature_1", y="target", data=train, ax=ax[0], title='feature_1')
0 条评论
下一页