版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人工智能及Python应用第11章人工智能+金融应用
1项目导入2职业能力目标3知能达标4
素养提升5视野拓展6项目评价目录1项目导入返回主目录在数字金融时代背景下,随着银行各类移动端应用的普及,海量的客户行为数据不断产生。这些数据记录了客户在与银行相关的所有自营线上渠道接触点上产生的全渠道、全场景行为。通过对这些数据的埋点、收集、存储与分析,银行可以深度还原客户的使用场景、浏览细节及操作路径。通过客户行为分析,银行可以了解客户在使用银行产品或服务过程中的行为模式和偏好,有助于银行更深入地理解客户的需求和期望,从而提供更加个性化、精准的服务。针对不同类型的客户,银行可以制订差异化的营销策略,提高营销效率和转化率。通过分析客户的交易行为和信用记录等数据,银行可以更加准确地评估客户的信用风险。海量数据机器学习数字金融客户在与银行相关的所有自营线上渠道接触点上产生的全渠道、全场景行为数据深度还原客户的使用场景、浏览细节及操作路径,提供更加个性化、精准的服务,提高营销效率和转化率,准确地评估客户的信用风险......2职业能力目标返回主目录职业技能类别职业能力要求人工智能工程师(HCIA-AI)v理解数据与人工智能的关系v理解机器学习典型应用流程人工智能训练师(四级)v熟悉常用数据分析及其工具v掌握文本数据采集与处理流程“Python程序开发”技能竞赛v掌握数据清洗、数据分析与可视化方法v会用scikit-learn库进行模型构建、训练和预测3知能达标返回主目录数据与算法之间的关系数据和算法之间存在着密切的关系,数据是算法的基础,算法是挖掘数据价值的“法宝”。算法的选择和设计需要考虑数据的类型、结构和特点;而数据价值的挖掘则需要使用合适的算法来提取有用的信息和模式。主要知识点【知能基础】数据分析与处理-数据分析“三剑客”
在信息化时代,人们在日常工作和生活中无时无刻不在产生着大量的数据。数据分析与处理是机器学习和数据应用中的关键环节,为提高数据质量和可用性奠定了基础。数据分析与处理的数据源包括社交媒体内容、企业数据库、物联网设备数据等。数据分析是从数据中提取价值、支持决策,包括对数据的探索性分析(如挖掘数据分布、相关性、趋势)、诊断性分析(如探究问题成因)、预测性分析(如基于历史数据预测未来)等。数据处理是数据技术的核心,包括数据加载、清洗、转换等步骤。下面以文本数据为例,介绍数据分析与处理的关键技术。【知能基础】数据分析与处理-数据分析“三剑客”【多学一招】我们常用的Word文档属于哪种类型的数据呢?是文本数据吗?大家注意,虽然Word文档中包含了文本信息,但它们通常不被视为纯粹的文本数据。因为在Word文档是一种结构化文档,可以包含文本、图像、表格、图表等多种类型的数据,它们通常以.doc或.docx格式存储,包含丰富的格式化信息,如字体样式、段落布局、页眉页脚等。在机器学习中,Word文档通常需要被处理成更易于分析的格式,如TXT、CSV或数据库。
【知能基础】数据分析与处理-数据分析“三剑客”Python中提供了很多强大的第三方数据分析库,其中NumPy库、pandas库和Matplotlib库被称为文本数据分析的“三剑客”。使用这三个库,都必须使用pip进行安装,命令为:pipinstallnumpypipinstallpandaspipinstallmatplotlib1.NumPy库基础(1)初识NumPy库NumPy(NumericalPython)是一个开源的Python科学计算库,用于进行大规模数值和矩阵运算。它是Python数据科学和机器学习领域中最核心的库之一,主要特点是引入了数组的概念,跟前面讲到的Python列表类似,但其支持各种复杂的数学运算和数据分析,这一点列表在功能和性能上都是有显著的差异的。下面通过Python列表创建一个NumPy数组的示例,进一步区分二者的不同。【知能基础】数据分析与处理-数据分析“三剑客”示例代码如下:示例代码#NumPy示例importnumpyasnp#创建一个Python列表python_list=[1,2,3,4,5]#使用numpy的array函数将列表转换为NumPy数组numpy_array=np.array(python_list)#打印结果print(python_list)print(numpy_array)print(type(python_list))
#打印python_list的类型print(type(numpy_array))
#打印numpy_array的类型【思考】请大家仔细观察运行结果,总结一下Python列表和NumPy数组的不同。
【知能基础】数据分析与处理-数据分析“三剑客”
(1)创建NumPy数组
前面已经介绍了通过np.array(列表)的方式创建NumPy数组,还有一些其他方法可创建数组,示例代码如下:示例代码2【知能基础】数据分析与处理-数据分析“三剑客”示例代码1#创建一个形状为(2,3)的未初始化数组empty_array=np.empty((2,3))print(empty_array)
#注意:输出可能是随机的,因为数组未被初始化#使用arange创建一个数组,从0到9(不包括10)arange_array=np.arange(10)print(arange_array)#使用linspace在0到1之间创建5个均匀间隔的数字linspace_array=np.linspace(0,1,5)print(linspace_array)#创建一个3x3的单位矩阵eye_array=np.eye(3)print(eye_array)#创建一个形状为(2,3)的数组,所有值都初始化为7full_array=np.full((2,3),7)print(full_array)#3.从现有数据创建数组#从现有数组创建一个子集数组original_array=np.array([0,1,2,3,4,5,6,7,8,9])subset_array=original_array[2:7]
#从索引2到索引6(不包括7)的子集print(subset_array)
#创建numpy#导入numpy库importnumpyasnp#1.使用numpy.array函数#从一维列表创建NumPy数组one_d_array=np.array([1,2,3,4,5])print(one_d_array)#从二维列表创建NumPy数组two_d_array=np.array([[1,2,3],[4,5,6]])print(two_d_array)#2.使用NumPy的内置函数#创建一个形状为(3,4)的零数组zeros_array=np.zeros((3,4))print(zeros_array)
运行结果如下:
注意:NumPy数组中的元素类型必须一致,即数组中的所有元素都是相同的数据类型(例如整数、浮点数或字符串)。NumPy库更多的功能将在后续实际的案例和项目中进行介绍。【知能基础】数据分析与处理-数据分析“三剑客”2.pandas库基础(1)初识pandas库pandas是从NumPy等库的基础上构建出来的,支持多种数据类型和复杂的数据结构,能够处理各种类型的数据集,例如支持从CSV、Excel、JSON、SQL等多种数据源读取数据并进行分析。pandas已经成为Python数据分析的必备高级工具,广泛应用在学术、金融、统计学等各个数据分析领域。pandas有两种不同的数据结构,分别是Series(一维数据结构)、DataFrame(二维数据结构)。(2)Series(一维数据结构)Series是一维数组,能够存储任何类型的数据(整数、字符串、浮点数等),每个元素都有一个标签(索引)。下面通过示例介绍pandas中Series(一维数据结构)的创建方法。【知能基础】数据分析与处理-数据分析“三剑客”示例代码#导入pandas、numpy库importpandasaspdimportnumpyasnp#1.从列表创建Seriesdata=[1,2,3,4]series_from_list=pd.Series(data)print("从列表创建Series结果:")print(series_from_list)#2.从字典创建Seriesdata_dict={'a':1,'b':2,'c':3,'d':4}series_from_dict=pd.Series(data_dict)print("从字典创建Series结果:")print(series_from_dict)#3.从标量创建Seriesscalar_value=5index=['a','b','c','d']series_from_scalar=pd.Series(scalar_value,index=index)print("从标量创建Series结果:")print(series_from_scalar)#4.从NumPy数组创建Seriesnp_array=np.array([1,2,3,4,5])series_from_np_array=pd.Series(np_array)print("从NumPy数组创建Series结果:")print(series_from_np_array)【知能基础】数据分析与处理-数据分析“三剑客”
(3)DataFrame(二维数据结构)DataFrame是是二维表格型数据结构,每列可以是不同的值类型(数值、字符串等),每一列都是一个Series。下面通过示例介绍DataFrame(二维数据结构)的创建方法,示例代码如下:示例代码2【知能基础】数据分析与处理-数据分析“三剑客”示例代码1#1.从字典创建DataFramedata={
'Name':['Alice','Bob','Charlie'],
'Age':[25,30,35],
'City':['NewYork','LosAngeles','Chicago']}df=pd.DataFrame(data)print("从字典创建DataFrame结果:")print(df)#2.从列表的列表(即嵌套列表)创建DataFramedata=[
['Alice',25,'NewYork'],
['Bob',30,'LosAngeles'],
['Charlie',35,'Chicago']]columns=['Name','Age','City']df=pd.DataFrame(data,columns=columns)print("从列表的列表(即嵌套列表)创建DataFrame结果:")print(df)#3.从NumPy数组创建DataFramedata=np.array([
['Alice',25,'NewYork'],
['Bob',30,'LosAngeles'],
['Charlie',35,'Chicago']])columns=['Name','Age','City']df=pd.DataFrame(data,columns=columns)print("从NumPy数组创建DataFrame结果:")print(df)#4.从另一个DataFrame创建新的DataFramedata={
'Name':['Alice','Bob','Charlie'],
'Age':[25,30,35],
'City':['NewYork','LosAngeles','Chicago']}df1=pd.DataFrame(data)df2=df1.copy()print("从另一个DataFrame创建新的DataFrame结果:")print(df2)#5.使用DataFrame构造函数直接创建DataFramedata={
'Column1':[1,2,3],
'Column2':['A','B','C']}index=['Row1','Row2','Row3']df=pd.DataFrame(data,index=index)print("使用DataFrame构造函数直接创建DataFrame结果:")print(df)3.Matplotlib库基础(1)初识Matplotlib库Matplotlib是一个Python绘图库,它提供了一个类似于MATLAB的绘图框架,使得创建高质量的图表变得简单。Matplotlib是Python数据科学和可视化领域中的核心库之一,特别适合用于生成各种静态、动态和交互式的图表,包括折线图、散点图、柱状图、直方图、箱线图、饼图、热力图、等高线图等。可以利用Matplotlib的高可定制性对图表的各个元素进行精细化调整,如线条样式、颜色、字体大小等。(2)绘制折线图使用Matplotlib绘制折线图是数据可视化中的基础任务之一。可以使用Matplotlib的plt.plot()函数绘制一个基本的折线图。【知能基础】数据分析与处理-数据分析“三剑客”示例代码如下:示例代码【知能基础】数据分析与处理-数据分析“三剑客”#导入matplotlib库importmatplotlib.pyplotasplt#绘制折线图#准备数据x=[1,2,3,4,5]
#点的x轴上坐标y=[2,3,5,7,11]
#点的y轴上坐标plt.figure()#调用plt.plot()函数#marker='o'表示用圆圈标记数据点plt.plot(x,y,label='FibonacciSequence',marker='o')
#添加标题和标签plt.title('SimpleLinePlot')plt.xlabel('X-axis')plt.ylabel('Y-axis')#显示图例plt.legend()#显示网格线(可选)plt.grid(True)#显示图形plt.show()
(2)绘制柱状图
柱状图(条形图)是常见的图表展现形式。使用Matplotlib绘制柱状图过程,与折线图类似,只是绘图函数不同,Matplotlib提供了plt.bar()和plt.barh()函数来分别创建垂直和水平的柱状图(条形图),示例代码如下:示例代码2【知能基础】数据分析与处理-数据分析“三剑客”示例代码1#绘制垂直柱状图#准备数据categories=['A','B','C','D']
#类别标签values=[4,7,1,8]
#每个类别的值#创建图形plt.figure(figsize=(10,6))
#设置图形的大小#调用plt.bar()函数plt.bar(categories,values,color='skyblue')
#使用skyblue颜色#添加标题和标签plt.title('VerticalBarChartExample')plt.xlabel('Categories')plt.ylabel('Values')#显示图形plt.show()#绘制水平柱状图(条形图)#准备数据categories=['A','B','C','D']
#类别标签values=[4,7,1,8]
#每个类别的值#创建图形plt.figure(figsize=(10,6))
#设置图形的大小#调用plt.barh()函数plt.barh(categories,values,color='lightgreen')
#使用lightgreen颜色#添加标题和标签(注意y轴和x轴标签的交换)plt.title('HorizontalBarChartExample')plt.ylabel('Categories')
#这里是y轴标签,但在水平条形图中它表示类别plt.xlabel('Values')
#这里是x轴标签,但在水平条形图中它表示值#显示图形plt.show()运行结果如下:
【知能基础】数据分析与处理-数据分析“三剑客”垂直柱状图水平柱状图(条形图)
(3)绘制散点图
散点图主要用于展示两个变量之间的关系,通过点的位置和分布来揭示数据的模式和趋势。可以使用Matplotlib的plt.scatter()函数绘制一个基本的散点图,示例代码如下:【知能基础】数据分析与处理-数据分析“三剑客”示例代码#绘制散点图#准备数据x=[1,2,3,4,5]
#x轴上的点y=[2,3,5,7,11]
#y轴上的点#创建图形plt.figure(figsize=(10,6))
#设置图形的大小#调用plt.scatter()函数plt.scatter(x,y,color='green',marker='o')
#color指定点的颜色,marker指定点的形状(这里是圆圈)#添加标题和标签plt.title('SimpleScatterPlot')plt.xlabel('X-axis')plt.ylabel('Y-axis')#显示网格线(可选)plt.grid(True)#显示图形plt.show()pandas库提供了多种数据格式的读取函数,见下表。这些函数通常返回一个DataFrame对象,这是一个二维的、表格型的数据结构,非常适合表示和操作结构化数据。
【知能基础】数据分析与处理-数据读取序号函数功能描述1pd.read_csv()从CSV(逗号分隔值)文件中读取数据示例代码:df=pd.read_csv('file.csv')2pd.read_excel()从Excel文件中读取数据示例代码:df=pd.read_excel('file.xlsx',sheet_name='Sheet1')3pd.read_sql()从SQL数据库中读取数据,需要SQLAlchemy或PyMySQL等数据库连接模块示例代码:importpandasaspdfromsqlalchemyimportcreate_engineengine=create_engine('mysql+pymysql://user:password@localhost/dbname')df=pd.read_sql('SELECT*FROMtable_name',con=engine)4pd.read_json()从JSON格式的文件中读取数据示例代码:df=pd.read_json('file.json')5pd.read_html()从HTML文件中读取数据示例代码:df_list=pd.read_html('file.html')#这将返回一个包含所有表格的DataFrame列表下面通过一个完整的示例演示从CSV文件中读取数据,并将数据展示出来。其中,CSV文件使用开源数据集-鸢尾花数据集(IrisDataset),它也称安德森鸢尾花卉数据集(Anderson’sIrisDataSet),是数据科学与机器学习领域中最著名的经典数据集之一。鸢尾花数据集共包含150条记录,包含三种鸢尾花的分类标签,每种类型各有50条记录,分别为Setosa(山鸢尾)、Versicolor(杂色鸢尾)、Virginica(维吉尼亚鸢尾)。数据集中每条记录代表一朵鸢尾花的测量数据,具体包括以下4个特征属性:1)花萼长度(SepalLength):单位为厘米,用于描述鸢尾花花萼的长度。2)花萼宽度(SepalWidth):单位为厘米,用于描述鸢尾花花萼的宽度。3)花瓣长度(PetalLength):单位为厘米,用于描述鸢尾花花瓣的长度。4)花瓣宽度(PetalWidth):单位为厘米,用于描述鸢尾花花瓣的宽度。【知能基础】数据分析与处理-数据读取
鸢尾花数据集文件名称为iris.csv,示例代码如下:【知能基础】数据分析与处理-数据读取示例代码#导入pandas库importpandasaspd#读取本地鸢尾花的iris.csv文本数据集,注意这里的文件路径要替换成自己的iris_data=pd.read_csv(r'../data/iris.csv')print('irisdata:')#打印iris鸢尾花前几行数据print(iris_data.head())#打印iris数据集的shape,共150行、5列数据print('irisdatashape:',iris_data.shape)#打印iris数据集的数据结构描述print('iris数据结构描述为:\n',iris_data.describe())数据清洗是数据分析、数据科学和机器学习过程中的一个重要步骤。它涉及识别并纠正数据集中的错误或异常,处理缺失值、重复值等。Pandas是Python中用于数据清洗的主要库之一,它提供了丰富的功能来处理缺失值和重复值。(1)处理缺失值使用pandas处理缺失值一般按照如下步骤处理:先使用isnull()或isna()方法检查DataFrame或Series中的缺失值;当缺失值很少时,直接使用dropna()方法删除包含缺失值的行或列;当数据具有明显规律或数量少时,使用fillna()方法用指定值填充缺失值。(2)处理重复值使用pandas处理重复值一般分为两个步骤,一是使用duplicated()方法检查DataFrame中的重复行;二是使用drop_duplicates()方法删除重复的行。【知能基础】数据分析与处理-数据清洗
下面将自定义创建一个包含一些缺失值和重复值的数据集,并展示如何使用pandas库中的方法来处理它们,示例代码如下:示例代码2【知能基础】数据分析与处理-数据清洗示例代码1#导入pandas、NumPy库importpandasaspdimportnumpyasnp#构造一个包含缺失值和重复值的数据集data={
'ID':[1,2,3,4,5,6,7,8,9,10,10],
'Name':['Alice','Bob','Charlie','David','Eve','Alice','Frank','Grace','Charlie','David','David'],
'Age':[25,30,np.nan,22,35,25,40,np.nan,30,22,22],
'Score':[85,90,88,np.nan,95,85,92,88,90,np.nan,np.nan]}df=pd.DataFrame(data)#显示原始数据集print("原始数据集:")print(df)print(df.shape)#处理缺失值#1.检查缺失值missing_values=df.isnull()print("\n缺失值检查:")print(missing_values)#2.删除包含缺失值的行df_no_missing_rows=df.dropna()print("\n删除包含缺失值的行后:")print(df_no_missing_rows)print(df_no_missing_rows.shape)#3.用指定值填充缺失值df_filled_na=df.fillna({'Age':df['Age'].mean(),'Score':0})print("\n用指定值填充缺失值后:")print(df_filled_na)print(df_filled_na.shape)#处理重复值#1.检查重复值(数据完全重复的行)duplicates=df.duplicated()print("\n重复值检查:")print(duplicates)#2.删除重复值(只保留第一次出现的行)df_no_duplicates=df.drop_duplicates()print("\n删除重复值后:")print(df_no_duplicates)print(df_no_duplicates.shape)#3.根据特定列删除重复值df_no_duplicates_on_name=df.drop_duplicates(subset=['Name'])print("\n根据'Name'列删除重复值后:")print(df_no_duplicates_on_name)print(df_no_duplicates_on_name.shape)
运行结果如下:【知能基础】数据分析与处理-数据清洗
从运行结果图可知,年龄Age显示结果为浮点数,尤其是填充缺失值后的结果,不太合理,可将浮点数转换为整数,如何转换呢?请学习下面的内容。
数据转换是数据分析中不可或缺的一部分,它确保数据的质量和一致性,为后续的建模和分析提供坚实的基础。数据转换通常包括数据类型转换、数据格式调整、创建新列等,下面通过一个综合示例进行介绍,示例代码如下:【知能基础】数据分析与处理-数据转换示例代码#导入pandas库importpandasaspd#创建一个示例
DataFramedf=pd.DataFrame({
'date':['20231001','20231002','20231003'],
'score':[85.5,90.5,78.5],
'name':['Alice','Bob','Charlie']})#打印转换前的数据print("\n转换前的数据:")print(df)#将字符串日期转换为日期时间类型df['date']=pd.to_datetime(df['date'])#将浮点数分数转换为整型df['score']=df['score'].astype(int)#去除字符串名称两端的空格并转换为大写df['name']=df['name'].str.strip().str.upper()#创建一个新列
'grade',其值为分数大于等于90为'A',否则为'B'df['grade']=df['score'].apply(lambdax:'A'ifx>=90else'B')#打印转换后的数据print("\n转换后的数据:")print(df)【知能基础】机器学习基础机器学习概念人类之所以能够学习,是由于我们拥有复杂的大脑结构和高度发达的认知能力,能够通过社会交互和适应环境的需求来获取经验知识。机器学习(
MachineLearning)则是通过让计算机模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,是人工智能的核心技术,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。总结起来,人类学习和机器学习具有很多相似之处,都是从输入到输出的过程,且经过复杂的思维训练。【知能基础】机器学习基础机器学习的常用算法机器学习根据学习方式的不同,可分为有监督学习(SupervisedLearning)、无监督学习(UnsupervisedLearning)、半监督学习(Semi-supervisedLearning)和强化学习(ReinforcementLearning)四大类。(1)有监督学习有监督学习(SupervisedLearning)是一种在已知输入输出对应关系的数据集上进行模型训练的方法。其核心在于利用已标注的数据(即带有标签的数据)进行训练,使模型能够学习到输入与输出之间的映射关系,从而能够对新的输入数据进行准确的预测或分类。最典型的有监督学习算法包括了分类和回归。分类方法是一种对离散型随机变量建模或预测的监督学习算法,预测的是类别,输出的是离散值,常用于各类图像分类、医学肿瘤判断、垃圾邮件识别、金融风险识别等场景。而回归方法是用来预测一个具体的数值输出,是一种对数值型连续随机变量进行预测和建模的监督学习算法。回归问题预测的是连续实数值,常用于股票价格预测、房价预测、健康评估等场景。【知能基础】机器学习基础机器学习的常用算法2.无监督学习无监督学习(Unsupervisedlearning)是一种通过探索数据的内在结构和规律来进行模型训练的方法。它不需要预先定义的标签或结果,而是通过对数据的统计特征、相似度等进行分析和挖掘,来发现数据中的隐藏模式和结构。无监督学习的核心思想是利用密度估计、聚类、降维等技术来捕获和发现数据的内在特性。最常见的两类无监督学习算法包括聚类和降维,聚类一般应用于电影推荐、用户分类、目标营销等;降维一般应用于结构发现、功能发现、数据可视化等。3.半监督学习半监督学习(Semi-supervisedLearning)是监督学习和非监督学习相结合的一种学习方式,通常可以用于分类以及回归问题。是指学习器自行利用少量的具有标记信息的样本和大量没有标记的样本进行学习的框架。其基本思想是利用少量的有标签数据和大量的无标签数据来进行模型训练,从而提高模型的性能。这种方法特别适用于那些获取大量标记数据成本高昂或困难的情况。【知能基础】机器学习基础机器学习的常用算法4.强化学习强化学习(ReinforcementLearning)属于自动进行决策,是智能体通过与环境的交互来学习最优策略,即在给定状态下选择最佳行动以最大化长期回报。智能体在环境中执行动作,并根据得到的奖励来更新自己的策略,以期望在未来获得更大的奖励。强化学习在游戏、机器人控制、自动驾驶等需要决策和优化长期目标的场景发挥着重要作用。强化学习在金融领域中也有广泛的应用,通过强化学习,机器可以分析市场数据,学习并优化交易策略,提高金融交易的收益和风险控制能力。【知能基础】机器学习库scikit-learn初识scikit-learn库scikit-learn(原名scikits.learn,以下简称为Sklearn)是一个开源的Python机器学习库,它建立在NumPy、SciPy和Matplotlib这些科学计算库之上,旨在实现机器学习、数据挖掘和数据分析的简单高效。Sklearn官网:/stable/【知能基础】机器学习库scikit-learn线性回归算法应用
公式【知能基础】机器学习库scikit-learn线性回归算法应用使用Sklearn库实现线性回归算法模型至少需要以下5个步骤:需要准备一个数据集(可以是sklearn库中自带的数据集,也可以自行选择其他数据集)。01数据准备从sklearn线性模型模块中选择线性回归LinearRegression算法,创建线性回归模型并实例化。02模型创建使用训练数据(X_train,
y_train)调用模型的fit方法来训练模型。03模型训练使用测试数据(X_test)调用模型的predict方法来生成预测值。04模型预测使用适当的评估指标来评估模型的性能,常用的有均方误差MSE和R²分数等。05模型评估【知能基础】机器学习库scikit-learn线性回归算法应用
公式【知能基础】机器学习库scikit-learn线性回归算法应用(2)R²分数,也称为决定系数(CoefficientofDetermination),是统计学和回归分析中用来衡量模型解释能力的一个指标。R²分数的取值范围大多数情况下在0到1之间,当R²=1时,通常表示模型完美拟合数据;当R²=0时,通常表示模型无法解释任何变异,即模型的表现与简单均值模型相同;当R²为负值时,通常表示模型的预测性能甚至不如简单均值模型。R²分数的计算公式为:其中,
是实际观测值,
是模型预测值,
是所有观测值的平均值,n
是观测值的数量。公式中的分子部分称为残差平方和(ResidualSumofSquares,RSS),衡量的是模型预测值与实际观测值之间的差异;分母部分称为总平方和(TotalSumofSquares,TSS),衡量的是观测值与其平均值之间的差异。公式
使用Sklearn库前,必须使用pip进行安装,命令为:【知能基础】机器学习库scikit-learn线性回归算法应用命令pipinstallscikit-learn
房价预测线性回归算法应用完整示例代码如下:示例代码2【知能基础】机器学习库scikit-learn示例代码1#导入必要的库importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLinearRegressionfromsklearn.metricsimportmean_squared_error,r2_score#1.数据准备#自定义生成数据集np.random.seed(0)
#设置随机种子以确保结果可复现X=2*np.random.rand(100,1)
#房屋面积(平方米)数据y=4+3*X+np.random.randn(100,1)
#房屋价格(万元)数据#分割数据集为训练集和测试集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)#2.模型创建model=LinearRegression()#3.模型训练model.fit(X_train,y_train)#4.模型预测y_pred=model.predict(X_test)#5.模型评估mse=mean_squared_error(y_test,y_pred)r2=r2_score(y_test,y_pred)print(f"MeanSquaredError:{mse}")print(f"R^2Score:{r2}")#打印模型参数print(f"Intercept:{ercept_}")#截距print(f"Coefficient:{model.coef_}")#权重#可视化结果plt.scatter(X_test,y_test,color='blue',label='Actualprices')plt.plot(X_test,y_pred,color='black',linewidth=3,label='Predictedprices')plt.xlabel('Area')plt.ylabel('Price')plt.legend()plt.show()
通过计算得出的截距(Intercept)和权重系数(Coefficient),所以拟合得到的一元线性回归方程为:【知能基础】机器学习库scikit-learn
线性回归可以分为一元线性回归和多元线性回归,多元线性回归模型的原理其实和一元线性回归的原理类似,可将多元线性回归模型表达为:公式
【知能进阶】机器学习库scikit-learn线性回归算法应用
【知能基础】机器学习库scikit-learn逻辑回归算法应用逻辑回归是一种广泛使用的分类算法,适用于二分类和多分类问题。在scikit-learn库中,同样也提供实现逻辑回归方法(LogisticRegression),实现步骤与线性回归类似:除了模型创建方法不同,主要是模型评估步骤中有所差异。在逻辑回归中的模型评估中,一般使用
accuracy_score()
计算准确率,使用classification_report()
打印分类报告(包括精确率、召回率和F1分数),使用confusion_matrix()
打印混淆矩阵以更详细地了解模型的分类性能。(1)准确率准确率(Accuracy)是评估分类模型性能的一个基础指标。它衡量的是模型正确预测的样本数占总样本数的比例,准确率计算公式为:准确率=正确预测的样本数/总样本数如果将真正例(TruePositives,TP)表示为模型正确预测为正类的样本数;真负例(TrueNegatives,TN)表示为模型正确预测为负类的样本数,假正例(FalsePositives,FP)表示为负类被错误预测为正类的样本数,假负例(FalseNegatives,FN)表示为正类被错误预测为负类的样本数,那么准确率也可以表示为:准确率=[真正例(TP)+真负例(TN)]/[(真正例(TP)+真负例(TN)+假正例(FP)+假负例(FN)]在机器学习和数据科学中,准确率是一个直观且易于理解的性能指标。当数据集中的类别分布相对平衡时,准确率能够提供一个很好的模型性能概览。然而,当类别分布不平衡时,准确率可能会受到误导,因为模型可能主要关注多数类别的预测准确性,而忽视了少数类别的预测性能。【知能基础】机器学习库scikit-learn逻辑回归算法应用(2)精确率精确率(Precision)是评估分类模型性能的一个重要指标,特别是在处理二分类或多分类问题时。它衡量的是模型预测为正类的样本中,实际为正类的比例。换句话说,精确率反映了模型预测为正类的准确性。精确率的计算公式为:精确率=真正例(TP)/[(真正例(TP)+假正例(FP))]其中,真正例(TP)为模型正确预测为正类的样本数;假正例(FP)为负类被错误预测为正类的样本数。(3)召回率召回率(Recall)是机器学习和统计分类领域中,用于衡量分类模型对正类样本识别能力的一个重要指标。它反映了在所有实际为正类的样本中,被模型正确识别为正类的样本所占的比例。召回率的计算公式为:召回率=真正例(TP)/[(真正例(TP)+假负例(FN))]其中,真正例(TP)为模型正确预测为正类的样本数;假负例(FN)为正类被错误预测为负类的样本数。【知能基础】机器学习库scikit-learn逻辑回归算法应用(4)F1分数F1分数(F1Score)是评估分类模型性能的一种指标,特别是在数据集不平衡的情况下,它综合考虑了模型的精确率(Precision)和召回率(Recall),提供了一个单一的数字来衡量模型的整体性能。F1分数是精确率和召回率的调和平均数,它试图在两者之间找到一个平衡。F1分数的值范围从0到1,值越高表示模型的性能越好。当精确率和召回率相等时,F1分数达到最大值。F1分数计算公式为:【知能基础】机器学习库scikit-learn逻辑回归算法应用(5)混淆矩阵混淆矩阵(ConfusionMatrix)是一个非常重要的工具,用于评估分类模型的性能。它是一个表格,用于描述分类模型的预测结果和实际结果之间的关系。混淆矩阵特别适用于二分类问题,但也可以扩展到多分类问题。对于二分类问题,混淆矩阵包含四个基本元素:TruePositives(TP):模型正确预测为正类的样本数量。FalsePositives(FP):模型错误预测为正类的样本数量(实际上是负类)。TrueNegatives(TN):模型正确预测为负类的样本数量。FalseNegatives(FN):模型错误预测为负类的样本数量(实际上是正类)。二分类混淆矩阵【知能基础】机器学习库scikit-learn逻辑回归算法应用对于多分类问题,混淆矩阵会更加复杂,每一类都会有相应的TP、FN、FP和TN。混淆矩阵会扩展为一个方阵,其中每一行代表实际类别,每一列代表预测类别。矩阵中的每个元素记录了真实类别为行所对应类、预测类别为列所对应类的样本数量。主对角线元素表示正确预测的样本数量,即各类别的真正例(TP)。例如,对于三个类别A、B、C的多分类问题,混淆矩阵可能如下图所示:多分类混淆矩阵
下面使用sklearn.datasets中的load_iris函数加载鸢尾花数据集,X变量存储了数据集中的特征(花瓣和萼片的长度和宽度),y变量存储了数据集中的目标变量(鸢尾花的种类),通过逻辑回归算法根据鸢尾花的特征预测是哪一个类别:Setosa(山鸢尾)、Versicolor(杂色鸢尾)、Virginica(维吉尼亚鸢尾),示例代码如下:示例代码2【知能基础】机器学习库scikit-learn示例代码1#导入必要的库importpandasaspdfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportaccuracy_score,classification_report,confusion_matrix#1.数据准备#从Sklearn自带的数据集中加载鸢尾花数据集。iris=load_iris()#获取特征变量X=iris.data#获取目标变量,在Sklearn中加载鸢尾花数据集时,类别已经是数字编码的,所以通常不需要进行数字转换y=iris.targetprint(iris.target_names)#划分数据集为训练集和测试集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42,stratify=y)#2.创建逻辑回归模型实例,鸢尾花是一个多分类的问题model=LogisticRegression(multi_class='multinomial',solver='lbfgs',max_iter=200)#3.训练模型model.fit(X_train,y_train)#4.使用测试集进行预测y_pred=model.predict(X_test)#5.评估模型,计算准确率accuracy=accuracy_score(y_test,y_pred)print(f'Accuracy:{accuracy:.2f}')#获取测试集中的唯一标签,以确保它们与分类报告中的标签匹配unique_labels=np.unique(y_test)#打印分类报告#以下两句代码,只保留其中1句即可#匹配第1种数据读取方法print(classification_report(y_test,y_pred,target_names=iris.target_names))#匹配第2种数据读取方法#print(classification_report(y_test,y_pred,target_names=['setosa','versicolor','virginica']))#打印混淆矩阵(同样,不需要手动指定标签)print(confusion_matrix(y_test,y_pred,labels=unique_labels))
运行结果如下:【说明】由于篇幅有限,重点介绍了两种机器学习算法(线性回归和逻辑回归)在Sklearn中的实现。其他机器学习算法在Sklearn中实现过程大同小异,请大家尝试在工作实践中到Sklearn官网(/)中学习更多的算法原理,并比较算法之间的异同。
【知能基础】机器学习库scikit-learn4素养提升返回主目录
使用sklearn库的典型流程包括数据准备、模型选择与训练、模型预测与评估、模型优化与调参以及模型保存与部署等步骤。这些步骤共同构成了一个完整的机器学习项目流程。
银行为了提高盈利能力,通常会对收集到客户数据进行分析,进而判断客户是否会订购银行的产品。BankMarketing数据集是一个与葡萄牙银行机构的营销活动相关的数据集,是机器学习领域常用的公开数据集之一,广泛应用于机器学习领域的分类问题中,特别是二分类问题。通过该数据集,可以建立模型来判断客户是否会认购银行的定期存款业务,从而帮助银行制订更好的营销策略,提高营销产品的订购率。BankMarketing数据集可以从UCI官网(/dataset/222/bank+marketing)下载。【项目实战】银行客户行为分析项目描述【项目实战】银行客户行为分析UCIBankMarketing数据集下载页面BankMarketing数据集中总体有bank和bank_additional两个压缩包文件,其中bank中核心数据包含bank.csv和bank-full.csv,bank_additional中核心数据包含bank-additional.csv和bank-additional-full.csv。UCIBankMarketing数据集【项目实战】银行客户行为分析BankMarketing中四个数据集提供了关于银行营销活动的不同规模和详细程度的数据,它们之间的主要区别在于特征变量的数量和样本的数量,如下表所示。选择哪个数据集取决于具体的分析需求和计算资源。
【项目实战】银行客户行为分析序号数据文件描述1bank-full.csv包含所有样本(41,188个),有16个特征变量和1个目标变量。数据按照时间顺序排列,是较早版本的数据集。适用于不需要那么多特征或者计算资源有限的情况2bank.csv从bank-full.csv中随机选取了10%的样本(4,119个)。这个数据集是bank-full.csv的一个子集,适用于需要较小数据集或进行快速原型设计的场景3bank-additional-full.csv包含所有样本(41,188个),有20个特征变量和1个目标变量。与bank-full.csv相比,增加了额外的社会和经济特征,提供了更全面的分析基础4bank-additional.csv从bank-additional-full.csv中随机选取了10%的样本(4,119个)。这个数据集是`bank-additional-full.csv`的一个子集,适用于需要较小数据集或进行快速原型设计的场景
下面选择bank-additional.csv数据集作为分析数据源,它包含20个特征变量(变量X)和1个目标变量(变量y),其中特征变量又可以分为数值型变量和分类变量,具体如下:分类变量【知能基础】机器学习库scikit-learn数值型变量Øage:客户的年龄。Øduration:最后一次通话时间,单位为秒。这个变量对输出目标有很大影响,但在建立预测模型时,通常需将其排除,因为在实际预测场景中,通话时间是在预测之后才能知道的。Øcampaign:此次营销活动联系某一特定客户的次数(包括上一次联系)。Øpdays:距离上一次联系某一客户经过的天数,999表示之前未联系客户。Øprevious:此次营销活动之前联系某一客户的次数。Øemp.var.rate:就业变动率,季度指标。Øcons.price.idx:消费者物价指数,每月指标。Øcons.conf.idx:消费者信心指数,每月指标。Øeuribor3m:Euribor3个月利率,每日指标。Ønr.employed:雇员人数,季度指标。Øjob:工作类型,如“管理员”“蓝领”“企业家”等。Ømarital:婚姻状况,如“离婚”“已婚”“单身”等。Øeducation:教育程度,如“基本4年”“高中”“大学学位”等。Ødefault:是否有违约信用,如“否”“是”等。Øhousing:是否有住房贷款,如“否”“是”等。Øloan:是否有个人贷款,如“否”“是”等。Øcontact:联系人通讯类型,如“蜂窝”“电话”等。Ømonth:一年中的最后一个接触月份,如“jan”“feb”等。Øday_of_week:一周的最后一天接触,如“星期一”“星期二”等。Øpoutcome:上次营销活动的结果,如“失败”“不存在”“成功”等。
目标变量(y)是客户是否已经认购定期存款y,它是一个二进制变量,取值为“yes”或“no”,为了便于使用,需要将其转换为数值型变量(1和0)。本项目是一个典型的分类问题,在使用数据集之前,通常需要进行数据预处理,包括处理缺失值、编码分类变量等,再使用机器学习中的逻辑回归算法建模、训练、预测和评估,模型保存和模型调用是可选的步骤。具体实现流程如图所示:银行客户行为分析项目实现流程图【项目实战】银行客户行为分析本项目所需环境见表所示:【项目实战】银行客户行为分析软件名称版本说明Windows操作系统Windows10及以上Anaconda4.10及以上PyCharm集成开发环境Community(社区版)Python库pandas、scikit-learn等项目实施(1)创建项目、Python文件及资源文件夹创建项目名为“data_analysis”,在该项目中新建Python文件“bank_data_analysis.
py”。还需在该项目下创建“data”文件夹,将准备好的数据集(例如bank-additional.
csv)放到“data”文件夹下。准备就绪就可以在“bank_data_analysis.py”中编码了。
【项目实战】银行客户行为分析(2)数据探索通过pd.read_csv()函数读取数据,使用df.head()方法用来展示前5行数据,代码如下。
【项目实战】银行客户行为分析实现代码#导入必要的库importpandasaspdfromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportaccuracy_score,confusion_matrix,classification_report#数据准备#注意两个地方:(1)文件路径要替换成自己的;(2)由于数据集中的数据以分号隔开,文本分隔符(sep)要设置为分号,默认为逗号。data=pd.read_csv(r'../data/bank-additional.csv',sep=';')#查看前5行数据print(data.head())#查看数据形状print(data.shape)(3)数据预处理为了让模型训练有高质量的数据,需要对数据进行基本的预处理,这里主要包括删除duration列、检查并处理缺失值和重复值。关于目标变量,客户是否已经认购定期存款(y),取值为“yes”或“no”,为了便于使用,需要将其转换为数值型变量(1和0),1表示“yes”,0表示“no”,使用pandas库中的get_dummies()函数实现。最后就是常规操作,即分割特征变量和目标变量以及划分训练集和测试集,代码如下:
【项目实战】银行客户行为分析实现代码#(1)删除duration列data_without_duration=data.drop('duration',axis=1)print(data_without_duration.shape)#(2)检查缺失值,该数据集没有缺失值missing_values=data_without_duration.isnull().sum()print(missing_values)print(missing_values[missing_values>0])
#只打印有缺失值的列#(3)检查重复值,该数据集没有重复值duplicate_rows=data.duplicated().sum()print(f'Numberofduplicaterows:{duplicate_rows}')#(4)将特征变量中的分类变量和目标变量数据转换成数值型#使用pandas的get_dummies()函数实现data_encoded=pd.get_dummies(data_without_duration,drop_first=True)#(5)分割特征和目标变量#特征变量是“X”,目标变量是“y”X=data_encoded.drop('y_yes',axis=1)
#特征变量y=data_encoded['y_yes']
#目标变量#(6)划分训练集和测试集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026北京市育英学校招聘备考题库及参考答案详解一套
- 2026江西省农业科学院园艺研究所编外招聘1人备考题库含答案详解(达标题)
- 吉安县文化馆2026年公开招聘派遣工作人员笔试安排备考题库含答案详解(突破训练)
- 2026上海浦东机场招聘海关辅助检疫岗备考题库及答案详解(易错题)
- 2026湖北民族大学附属民大医院招聘2人备考题库附答案详解
- 2026中国共产党曲靖市委员会统一战线工作部招聘公益性岗位3人备考题库(云南)有完整答案详解
- 2026云南宏合新型材料有限公司招聘备考题库含答案详解(模拟题)
- 2026贵州黔南州罗甸县第一医共体沫阳分院面向社会招聘工作人员3人备考题库附答案详解(培优b卷)
- 2026上半年四川乐山市夹江县事业单位考核招聘7人备考题库及答案详解(必刷)
- 2026航天科工集团数字技术有限公司部分岗位招聘11人备考题库带答案详解(完整版)
- 2026年银行竞聘面试无领导小组讨论案例集含答案
- 北京市2025中国国家话剧院应届毕业生招聘11人笔试历年参考题库典型考点附带答案详解
- (二模)2026年深圳市高三年级第二次调研考试英语试卷(含答案)
- 2026上海市闵行区区管国企招聘42人备考题库附答案详解(夺分金卷)
- 2025-2026学年下学期八年级历史期中试卷(含答案)
- 2026年南京地铁招聘考试题库
- 2026年高等学校教师岗前培训暨教师资格笔通关试题库附参考答案详解(典型题)
- GA 1817.1-2026学校反恐怖防范要求第1部分:普通高等学校
- 2026智慧酒店解决方案
- 2026杭州市钱塘(新)区紧缺岗位人才招聘14人考试备考题库及答案解析
- 腰椎病中医护理推拿手法
评论
0/150
提交评论