简单又高大上的项目(应付复试的小demo)()

  本篇文章为你整理了简单又高大上的项目(应付复试的小demo)()的详细内容,包含有 简单又高大上的项目(应付复试的小demo),希望能帮助你了解 简单又高大上的项目(应付复试的小demo)。

  简单又高大上的项目

  图形识别、自然语言处理(语言识别、语音转文字)、文字识别、区块链

  1.java实现一个基本的文字识别

  引入依赖

  

 !-- ai 文字识别 -- 

 

   dependency

   groupId com.baidu.aip /groupId

   artifactId java-sdk /artifactId

   version 4.16.13 /version

   /dependency

  

 

  picToWord.Sample

  调用百度智能云API: https://cloud.baidu.com/?_=1675227888185

  

package picToWord;

 

  
public static final String APP_ID = "30002607";

   public static final String API_KEY = "lQ9sTDm6Bb5QQXnt8iGLuY0x";

   public static final String SECRET_KEY = "vhboZlmy0x0FuZYxWnFbrTNHBaUDzwKn";

   public static void main(String[] args) {

   // 初始化一个AipOcr

   AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);

   // 可选:设置网络连接参数

   client.setConnectionTimeoutInMillis(2000);

   client.setSocketTimeoutInMillis(60000);

   // 可选:设置代理服务器地址, http和socket二选一,或者均不设置

  // client.setHttpProxy("proxy_host", proxy_port); // 设置http代理

  // client.setSocketProxy("proxy_host", proxy_port); // 设置socket代理

   // 可选:设置log4j日志输出格式,若不设置,则使用默认配置

   // 也可以直接通过jvm启动参数设置此环境变量

   System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");

   // 调用接口

  // String path = "test.jpg";

   String path = "D:/vue/Ai/view.jpg";

   JSONObject res = client.basicGeneral(path, new HashMap String, String

  // getJSONObject是用来转换对象的,一般是{}这个符号括起来的内容,而getJSONArray是用来转换数组的,一般是[]这个符号括起来的内容,

  // 参考 https://blog.csdn.net/weixin_44421896/article/details/124076501

   JSONArray words_result = res.getJSONArray("words_result");

   for (int i = 0; i words_result.length(); i++) {

  // System.out.println(words_result.getJSONObject(i));

   JSONObject jsonObject = words_result.getJSONObject(i);

   Object words = jsonObject.get("words");

   //转化为string类型的

   String s = (String) words;

   System.out.println(s);

   System.out.println(res.toString(2));

  
2.实现完整的web项目(文字识别)

  1.文字识别OCR原理: https://blog.csdn.net/q123456789098/article/details/79760579?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167505712716782425620880%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D request_id=167505712716782425620880 biz_id=0 utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~pc_rank_34-17-79760579-null-null.142v71pc_new_rank,201v4add_ask utm_term=%E6%96%87%E5%AD%97%E8%AF%86%E5%88%ABOCR%E5%8E%9F%E7%90%86 spm=1018.2226.3001.4187

  2.OpenCV+OCR 图像处理字符识别原理及代码:

   (6条消息) OpenCV+OCR 图像处理字符识别原理及代码_p312011150的博客-CSDN博客

  所需依赖

  

 !-- ai 文字识别 -- 

 

   dependency

   groupId com.baidu.aip /groupId

   artifactId java-sdk /artifactId

   version 4.16.13 /version

   /dependency

   !-- thymeleaf--

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-thymeleaf /artifactId

   /dependency

  

 

  2.1 utils.AiUtils

  

package com.example.demo.utils;

 

  
public static final String APP_ID = "30002607";

   public static final String API_KEY = "lQ9sTDm6Bb5QQXnt8iGLuY0x";

   public static final String SECRET_KEY = "vhboZlmy0x0FuZYxWnFbrTNHBaUDzwKn";

   public static String picToWords(MultipartFile file) throws IOException {

   // 初始化一个AipOcr

   AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);

   * 通用文字识别 client.basicGeneral(image, options); 用户向服务请求识别某张图中的所有文字。

   * 身份证识别 client.idcard(image, idCardSide, options); 用户向服务请求识别身份证,身份证识别包括正面和背面。

   * 银行卡识别 client.bankcard(image, options); 识别银行卡并返回卡号和发卡行。

   * 驾驶证识别 client.drivingLicense(image, options); 对机动车驾驶证所有关键字段进行识别。

   * 行驶证识别 client.vehicleLicense(image, options);

   * 车牌识别 client.plateLicense(image, options); 识别机动车车牌,并返回号牌号码和车牌颜色。

   * 火车票识别 client.trainTicket(image,EImgType.FILE, options) 支持对红、蓝火车票的13个关键字段进行结构化识别,包括车票号码、始发站、目的站、车次、日期、票价、席别、姓名、座位号、身份证号、售站、序列号、时间。

   * 数字识别 client.numbers(image,options); 对图片中的数字进行提取和识别,自动过滤非数字内容,仅返回数字内容及其位置信息,识别准确率超过99%。

   * 二维码识别 client.qrcode(file, options); 对图片中的二维码、条形码进行检测和识别,返回存储的文字信息。

   * 手写文字识别 client.handwritingUrl(url, options); client.handwriting(file, options); 支持对图片中的手写中文、手写数字进行检测和识别,针对不规则的手写字体进行专项优化,识别准确率可达90%以上。

   // 调用接口

   JSONObject res = client.basicGeneral(file.getBytes(), new HashMap String, String

   // getJSONObject是用来转换对象的,一般是{}这个符号括起来的内容,而getJSONArray是用来转换数组的,一般是[]这个符号括起来的内容,

   // 参考 https://blog.csdn.net/weixin_44421896/article/details/124076501

   JSONArray words_result = res.getJSONArray("words_result");

   String result = "";

   for (int i = 0; i words_result.length(); i++) {

  // System.out.println(words_result.getJSONObject(i));

   JSONObject jsonObject = words_result.getJSONObject(i);

   Object words = jsonObject.get("words");

   //转化为string类型的

   String s = (String) words;

   result += s + "";

  // System.out.println(result);

   return result;

  
import com.example.demo.utils.AiUtils;

  import org.springframework.web.bind.annotation.RequestMapping;

  import org.springframework.web.bind.annotation.RequestParam;

  import org.springframework.web.bind.annotation.RestController;

  import org.springframework.web.multipart.MultipartFile;

  import java.io.IOException;

  @RestController

  public class AiController {

   @RequestMapping("/pic")

   public String PicToWord(@RequestParam("file") MultipartFile file) throws IOException {

   String res = AiUtils.picToWords(file);

   System.out.println(res);

   return res;

  

 

  2.3resources\templates\index.html

  

 !DOCTYPE html 

 

   html lang="en"

   head

   meta charset="UTF-8"

   title Ai Studio /title

   !-- 引入样式 --

   link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"

   /head

   body

   h1 普通文本识别 /h1

   div id="app"

   el-upload

   drag

   action="/pic"

   multiple

   :on-success="dealSuccess"

   i /i

   div 将文件拖到此处,或 em 点击上传 /em /div

   div slot="tip" 只能上传图片文件,且不超过500M /div

   /el-upload

   !-- 输出图片中文字的内容 --

   !-- el-input v-model="words" /el-input --

   el-input

   type="textarea"

   :rows="4"

   v-model="words"

   /el-input

   h1 身份证识别 /h1

   h1 票据识别 /h1

   /div

   /body

   !-- import Vue before Element --

   script src="https://unpkg.com/vue@2/dist/vue.js" /script

   !-- import JavaScript 引入组件库 --

   script src="https://unpkg.com/element-ui/lib/index.js" /script

   script

   new Vue({

   el: #app,

   data:{

   words:

   methods:{

   dealSuccess(res,file){

   console.log("res",res)

   console.log("file",file)

   this.words = res;

   /script

   /html

  

 

  3. 人工智能项目背后知识学习

  参考: https://www.paddlepaddle.org.cn/tutorials/projectdetail/4676538

  这方面我也没有搞得很明白,所以我想通过考研,在研究生阶段来继续对它进行了解

  学习项目背后的人工智能相关的技术和算法。以及常见名词,概念

  1.通过 百度PaddlePaddle平台学习。

  2.通过 bilibili 学习

  4. 图像识别的实现及前后端分离(图像识别)

  4.1controller.AiController

  

package com.example.demo.controller;

 

  import com.example.demo.utils.AiFace;

  import com.example.demo.utils.AiUtils;

  import org.springframework.web.bind.annotation.RequestMapping;

  import org.springframework.web.bind.annotation.RequestParam;

  import org.springframework.web.bind.annotation.RestController;

  import org.springframework.web.multipart.MultipartFile;

  import java.io.IOException;

  @RestController

  public class AiController {

   @RequestMapping("/img")

   public String ImgToWord(@RequestParam("file") MultipartFile file) throws IOException {

   String res = AiFace.imgRecognition(file);

   System.out.println(res);

   return res;

  

 

  4.2utils.AiFace

  

package com.example.demo.utils;

 

  import com.baidu.aip.imageclassify.AipImageClassify;

  import org.json.JSONArray;

  import org.json.JSONObject;

  import org.springframework.web.multipart.MultipartFile;

  import java.io.IOException;

  import java.util.HashMap;

  public class AiFace {

   //设置APPID/AK/SK

   public static final String APP_ID = "30013654";

   public static final String API_KEY = "q52mwPN5nWYGBGrApmGaEwIE";

   public static final String SECRET_KEY = "eSVgkcpNsSWb51wZIdFFZbeujyf3bOHY";

   public static String imgRecognition(MultipartFile file) throws IOException {

   // 初始化一个AipImageClassify

   AipImageClassify client = new AipImageClassify(APP_ID, API_KEY, SECRET_KEY);

  /** 通用物体和场景识别 client.advancedGeneral(image, options); 输出图片中的多个物体及场景标签。

   * 植物识别 client.plantDetect(image, options)

   * 动物识别 client.animalDetect(image, options)

   * 果蔬识别 client.ingredient(image, options); 输出图片中的果蔬食材结果。

   * logo商标识别 client.logoSearch(image, options);

   * 菜品识别 client.dishDetect(image, options); 输出图片的菜品名称、卡路里信息、置信度.

   * 通用物体和场景识别 client.advancedGeneral(image, options); 输出图片中的多个物体及场景标签。

   * 车辆识别 client.carDetect(image, options); 即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片的车辆品牌及型号。

   * score:置信度,0-1 , 是有多大几率是什么

   // 调用接口

  // String path = "D:/vue/Ai/pic1.png";

   JSONObject res = client.advancedGeneral(file.getBytes(), new HashMap String, String

  // System.out.println(res.toString(2));

   return res.toString(2);

  

 

  4.3index.html

  

 !DOCTYPE html 

 

   html lang="en"

   head

   meta charset="UTF-8"

   title Ai Studio /title

   !-- 引入样式 --

   link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"

   style

   .a1{

   align-items: center;

   color: #f0c239;

   width: 800px;

   height: 600px;

   border: 1px solid #5F9EA0;

   margin: auto;

   text-align: center;

   .el-textarea__inner{

   height: 200px;

   /style

   /head

   body

   div id="app"

   div

   h1 基于百度AI实现的文字识别demo示例 /h1

   el-tabs v-model="activeName"

   el-tab-pane label="文字识别" name="first"

   !-- 文字识别--

   el-upload

   drag

   action="/pic"

   multiple

   :on-success="dealSuccess"

   i /i

   div 将文件拖到此处,或 em 点击上传 /em /div

   div slot="tip" 只能上传图片文件,且不超过500M /div

   /el-upload

   !-- 输出图片中文字的内容 --

   !-- el-input v-model="words" /el-input --

   el-input

   type="textarea"

   :rows="10"

   v-model="words"

   /el-input

   /el-tab-pane

   el-tab-pane label="身份证识别" name="second" 身份证识别 /el-tab-pane

   el-tab-pane label="车牌识别" name="third"

   el-upload

   drag

   action="/car"

   multiple

   :on-success="carRecognition"

   i /i

   div 将文件拖到此处,或 em 点击上传 /em /div

   div slot="tip" 只能上传图片文件,且不超过500M /div

   /el-upload

   el-input

   type="textarea"

   :rows="10"

   v-model="carpic"

   /el-input

   /el-tab-pane

   el-tab-pane label="图像识别" name="fourth"

   el-upload

   drag

   action="/img"

   multiple

   :on-success="ImageRecognition"

   i /i

   div 将文件拖到此处,或 em 点击上传 /em /div

   div slot="tip" 只能上传图片文件,且不超过500M /div

   /el-upload

   el-input

   type="textarea"

   :rows="8"

   v-model="imgpic"

   /el-input

   /el-tab-pane

   /el-tabs

   /div

  
!-- div 将文件拖到此处,或 em 点击上传 /em /div --

   !-- div slot="tip" 只能上传图片文件,且不超过500M /div --

   !-- /el-upload --

   !-- ! ndash; 输出图片中文字的内容 ndash; --

   !-- ! ndash; el-input v-model="words" /el-input ndash; --

   !-- el-input--

   !-- type="textarea"--

   !-- :rows="4"--

   !-- v-model="words" --

   !-- /el-input --

   !-- hr/ --

   !-- h1 身份证识别 /h1 --

   !-- hr/ --

   !-- h1 车牌识别 /h1 --

   !-- el-upload--

   !-- --

   !-- drag--

   !-- action="/car"--

   !-- multiple--

   !-- :on-success="carRecognition" --

   !-- i /i --

   !-- div 将文件拖到此处,或 em 点击上传 /em /div --

   !-- div slot="tip" 只能上传图片文件,且不超过500M /div --

   !-- /el-upload --

   !-- el-input--

   !-- type="textarea"--

   !-- :rows="4"--

   !-- v-model="carpic" --

   !-- /el-input --

   !-- hr/ --

   !-- h1 图像识别 /h1 --

   !-- el-upload--

   !-- --

   !-- drag--

   !-- action="/img"--

   !-- multiple--

   !-- :on-success="ImageRecognition" --

   !-- i /i --

   !-- div 将文件拖到此处,或 em 点击上传 /em /div --

   !-- div slot="tip" 只能上传图片文件,且不超过500M /div --

   !-- /el-upload --

   !-- el-input--

   !-- type="textarea"--

   !-- :rows="4"--

   !-- v-model="imgpic" --

   !-- /el-input --

   /div

   /body

   !-- import Vue before Element --

   script src="https://unpkg.com/vue@2/dist/vue.js" /script

   !-- import JavaScript 引入组件库--

   script src="https://unpkg.com/element-ui/lib/index.js" /script

   script

   new Vue({

   el: #app,

   data:{

   words:,

   imgpic:,

   carpic:,

   activeName:first

   methods:{

   dealSuccess(res,file){

   console.log("res",res)

   console.log("file",file)

   this.words = res;

   ImageRecognition(res,file){

   console.log("res",res)

   console.log("file",file)

   //将Array数组转换成JSON格式数组

   this.imgpic = JSON.stringify(res.result);

   carRecognition(res,file){

   console.log("res",res)

   this.carpic = JSON.stringify(res.words_result);

   /script

   /html

  

 

  5.NLP自然语言处理(重点)开发及Python开发介绍

  NLP自然语言处理 。 需要了解:NLP特点,优势、劣势,即基本实现原理。

  6.区块链的基本理论知识

  区块链技术与应用 学习的课程 :https://study.163.com/course/introduction/1006145002.htm?inLoc=ss_ssjg_tjlb_区块链

  比特币和区块链 区别:跟先有鸡还是先有蛋是一样的道理

  区块链主要是 概念多

  主要考察:

  1.区块链的数据结构 链式结构 默克尔树...

  2.密码学 hash ,对称加密,非对称密码...

  3.共识算法

  区块链: 区块链就是一个大型分布式数据库,并且这个数据库是只能 查询和新增,不能删除和修改。

  区块链特点: 只能查询 新增,不能删除和修改, 每一个群成员就是一个完整的数据库(比如 QQ群 微信群)

  Hash

  任意长度的数据和字符串 转化为一个固定长度的字符串

  https://andersbrownworth.com/blockchain/hash

  区块

  中本聪 --论文 -- 比特币 一种点对点的电子现金系统

  比特币: 1枚比特币= 211974 RBM

  比特币设计原理:

  设计一种数字货币需要考虑哪些问题?

  中心化机构(银行、微信、支付宝)

  非中心化的机构

  7.以太坊和智能合约

  ETH(以太坊)

  区块链 2.0

  智能合约(一个脚本代码)

  智能合约相当于是跑在区块链上的代码

  区块链共识算法:特点:

  分布式共识算法

  POW: 工作量证明(prove of work)

  区块链共识算法总结(PBFT,Raft,PoW,PoS,DPoS,Ripple) - 小尾学长 - (cnblogs.com)

  POS:股权证明

  8.人工智能基础及基本概念

  1.机器学习与深度学习和人工智能又是什么关系?

  其实他们之间是包含与被包含的关系,下面展示了他们之间的关系图,如下所示

  2.机器学习形式分类

  ​ 机器学习是人工智能的主要表现形式,其学习形式主要分为:有监督学习、无监督学习、半监督学习等,对于“监督”一词,其实你可以把这个词理解为习题的“参考答案”,专业术语叫做“标记”。比如有监督学习就是有参考答案的学习,而无监督就是无参考答案。

  1)有监督学习

  有监督学习(supervised learning),需要你事先准备好要输入数据(训练样本)与真实的输出结果(参考答案),然后通过计算机的学习得到一个预测模型,再用已知的模型去预测未知的样本,这种方法被称为有监督学习。这也是最常见的机器学习方法。简单来说,就像你已经知道了试卷的标准答案,然后再去考试,相比没有答案就去考试准确率会更高,也更容易。

  2)无监督学习

  ​ 理解了有监督学习,那么无监督学习理解起来也变的容易。所谓无监督学习(unsupervised learning)就是在没有“参考答案”的前提下,计算机仅根据样本的特征或相关性,就能实现从样本数据中训练出相应的预测模型。

  除了上述两种学习形式外,还有半监督学习和强化学习,有兴趣可以自己研究一下。

  一句话描述学习方式

  监督学习:训练数据包括正确的结果。

  无监督学习:训练数据不包括正确的结果。

  半监督学习:训练数据包含少量正确结果。

  强化学习:根据每次结果收获的奖惩进行学习,根据结果实现优化。

  监督学习包含:线性回归、逻辑回归、决策树、神经网铬、卷积神经网络、循环神经网铬等。

  无监督学习:聚类算法。

  混合学习:一般指监督学习+无鉴督学习

  3.预测结果分类

  ​ 根据预测结果的类型,我们可以对上述学习形式做具体的问题划分,这样就可以具体到实际的应用场景中,比如有监督学习可以划分为:回归问题 和 分类问题。如果预测结果是离散的,通常为分类问题,而为连续的,则是回归问题。

  1)回归 分类

  ​ 连续和离散是统计学中的一种概念,全称为“连续变量”和“离散变量”。比如身高,从1.2m到1.78m这个长高的过程就是连续的,身高只随着年龄的变化一点点的长高。那么什么是“离散变量”呢?比如超市每天的销售额,这类数据就是离散的,因为数据不是固定,可能多也可能少。关于什么是“回归”和“分类”在后续内容中会逐步讲解。

  2)聚类

  ​ 无监督学习是一种没有“参考答案”的学习形式,它通过在样本之间的比较、计算来实现最终预测输出,比如聚类问题,那什么是“聚类”?其实可以用一个成语表述“物以类聚,人以群分“,将相似的样本聚合在一起后,然后进行分析。关于聚类也会在后续内容中逐步讲解。

  ​ 在学习机器学习技术的过程中,我们会遇到很多专业术语或者生僻词汇,这些名词大多数来自于数学或者统计学领域,比如模型、数据集、样本、熵,以及假设函数、损失函数等,这些属词汇于基本的常识,但是如果你第一次接触的话,也会感觉到些许惊慌。在下一节我们将介绍机器学习的常用术语。

  本节需要知道的知识点:

  1、人工智能、机器学习、深度学习是什么关系?

  ​ 上面呢个图

  2、什么是机器学习?

  ​ 单从定义上来说,机器学习是一种功能、方法,或者更具体的说是一种算法,它能够赋予机器进行学习的能力,从而使机器完成一些通过编程无法直接实现的功能。但从具体的实践意义来说,其实机器学习是利用大量数据训练出一个最优模型,然后再利用此模型预测出其他数据的一种方法。比如要识别猫、狗照片就要拿它们各自的照片提炼出相应的特征(比如耳朵、脸型、鼻子等),从而训练出一个俱有预测能力的模型。

  3、机器学习有哪些学习形式?

  ​ 有监督学习、无监督学习、半监督学习、强化学习

  4、预测结果有哪些类型,分别是什么?

  ​ 回归 分类 和 聚类

  9.机器学习专业术语

  机器学习常用术语

  ​ 机器学习是一门专业性很强的技术,它大量地应用了数学、统计学上的知识,因此总会有一些蹩脚的词汇,这些词汇就像“拦路虎”一样阻碍着我们前进,甚至把我们吓跑。因此认识,并理解这些词汇是首当其冲的任务。本节将介绍机器学习中常用的基本概念,为后续的知识学习打下坚实的基础。

  机器学习术语

  1)模型

  ​ 模型这一词语将会贯穿整个教程的始末,它是机器学习中的核心概念。你可以把它看做一个“魔法盒”,你向它许愿(输入数据),它就会帮你实现愿望(输出预测结果)。整个机器学习的过程都将围绕模型展开,训练出一个最优质的“魔法盒”,它可以尽量精准的实现你许的“愿望”,这就是机器学习的目标。 如股票预测模型,房价预测模型、天气预测模型....

  2)数据集

  ​ 数据集,从字面意思很容易理解,它表示一个承载数据的集合,如果说“模型”是“魔法盒”的话。那么数据集就是负责给它充能的“能量电池”,简单地说,如果缺少了数据集,那么模型就没有存在的意义了。数据集可划分为“训练集”和“测试集”,它们分别在机器学习的“训练阶段”和"预测输出阶段”起着重要的作用。

  3)样本 特征

  ​ 样本指的是数据集中的数据,一条数据被称为”一个样本”,通常情况下,样本会包含多个特征值期来描述数据,比如现在有一组描述人形态的数据”180 70 25”如果单看数据你会非常茫然,但是用”特征”描述后就会变得容易理解,如下所示:

  
由上图可知数据集的构成是“一行一样本,一列一特征”。特征值也可以理解为数据的相关性,每一列的数据都与这一列的特征值相关。

  4)向量

  ​ 任何一门算法都会涉及到许多数学上的术语或者公式。在本教程写作的过程中也会涉及到很多数学公式,以及专业的术语,在这里我们先对常用的基本术语做一下简单讲解。

  ​ 第一个常用术语就是“向量”,向量是机器学习的关键术语。向量在线性代数中有着严格的定义。向量也称欧几里得向量、几何向量、矢量,指具有大小和方向的量。您可以形象地把它的理解为带箭头的线段。箭头所指:代表向量的方向;线段长度:代表向量的大小。与向量对应的量叫做数量(物理学中称标量),数量只有大小,没有方向。向量既有大小又有方向

  ​ 在机器学习中,模型算法的运算均基于线性代数运算法则,比如行列式、矩阵运算、线性方程等等。其实对于这些运算法则学习起来并不难,它们都有着一定运算规则,只需套用即可,因此你也不必彷徨,可参考向量运算法则。向量的计算可采用NmuPy来实现,如下所示:

  

import numpy as np

 

  #构建向量数组

  a=np.array([-1,2])

  b=np.array([3,-1])

  a_b=a+b

  a2=a*2

  b3=b*(-3)

  b_a=a-b

  print(a_b,a2,b3,b_a)

  #矩阵乘法

  a=np.array([1,2],[3,4])

  b=np.array([4,3],[2,1])

  c=np.matmul(a,b)

  print(c)

  

 

  简而言之,数据集中的每一个样本都是一条具有向量形式的数据。

  ​ 矩阵也是一个常用的数据术语,你可以把矩阵看成由向量组成的二维数组,数据集就是以二维矩阵的形式存储数据的,你可以把它形象的理解为电子表格“一行一样本,一列一特征”表现形式如下:

  假设函数 损失函数

  ​ 机器学习在构建模型的过程中会应用大量的数学函数,正因为如此很多初学者对此产生畏惧,那么它们真会有这么可怕吗?其实我认为至少没有你想的那么可怕。从编程角度来看,这些函数就相当于模块中内置好的方法,只需要调用相应的方法就可以达成想要的目的。而要说难点,首先你要理解你的应用场景,然后根据实际的场景去调用相应的方法,这才是你更应该关注的问题。

  ​ 假设函数和损失函数是机器学习中的两个重要概念,它并非某个模块下的函数方法,而是我们根据实际应用场景确定的一种函数形式,就像你解决数学的应用题目一样,根据题意写出解决问题的方程组。下面分别来看一下它们的含义。

  1)假设函数

  ​ 假设函数(Hypothesis Function)可表述为y=f(x)其中X表示输入数据,而y表示输出的预测结果,而这个结果需要不断的优化才会达到预期的结果,否则会与实际值偏差较大。

  2)损失函数

  损失函数(Loss Function)又叫目标函数,简写为L(x),这里的×是假设函数得出的预测结果“y”,如果L(x)的返回值越大就表示预测结果与实际偏差越大,越小则证明预测值越来越“逼近”真实值,这才是机器学习最终的目的。因此损失函数就像一个度量尺,让你知道“假设函数”预测结果的优劣,从而做出相应的优化策略。

  3)优化方法

  ​ “优化方法”可以理解为假设函数和损失函数之间的沟通桥梁。通过L(x)可以得知假设函数输出的预测结果与实际值的偏差值,当该值较大时就需要对其做出相应的调整,这个调整的过程叫做“参数优化”,而如何实现优化呢?这也是机器学习过程中的难点。其实为了解决这一问题,数学家们早就给出了相应的解决方案,比如梯度下降、牛顿方与拟牛顿法、共轭梯度法等等。因此我们要做的就是理解并掌握“科学巨人”留下的理论、方法。

  ​ 对于优化方法的选择,我们要根据具体的应用场景来选择应用哪一种最合适,因为每一种方法都有自己的优劣势,所以只有合适的才是最好的。

  拟合 过拟合 欠拟合

  ​ 拟合是机器学习中的重要概念,也可以说,机器学习的研究对象就是让模型能更好的拟合数据,那到底如何理解“拟合”这个词呢?

  1)拟合

  ​ 形象地说,“拟合”就是把平面坐标系中一系列散落的点,用一条光滑的曲线连接起来,因此拟合也被称为“曲线拟合”。拟合的曲线一般用函数进行表示,但是由于拟合曲线会存在许多种连接方式,因此就会出现多种拟合函数。通过研究、比较确定一条最佳的“曲线”也是机器学习中一个重要的任务。如下图所示,展示一条拟合曲线(蓝色曲线):

  ​ 如何理解拟合,举个例子:上图假设为超市每天的营业额,通过对历史数据拟合出来一条拟合曲线,通过这个拟合曲线去预测未来的营业额。

  提示:很多和数学相关的编程语言都内置计算拟合曲线的函数,比如MATLAB、Python Scipy等,在后续内容中还会介绍。

  2)过拟合

  ​ 过拟合(overfitting)与是机器学习模型训练过程中经常遇到的问题,所谓过拟合,通俗来讲就是模型的泛化能力较差,也就是过拟合的模型在训练样本中表现优越,但是在验证数据以及测试数据集中表现不佳。(我在股票预测模型中的表现特别好,每一天都全部都吻合,但是一旦预测股票,天天被割韭菜~)

  ​ 举一个简单的例子,比如你训练一个识别狗狗照片的模型,如果你只用金毛犬的照片训练,那么该模型就只吸纳了金毛狗的相关特征,此时让训练好的模型识别一只“泰迪犬”,那么结果可想而知,该模型会认为“泰迪”不是一条狗。如下图所示:

  过拟合问题在机器学习中经常遇到,主要是因的训练时样本过少,特征值过多导致的,后续还会详细介绍。

  3)欠拟合

  ​ 欠拟合(underfitting)恰好与过拟合相反,它指的是“曲线”不能很好的“拟合"数据。在训练和测试阶段,欠拟合模型表现均较差,无法输出理想的预测结果。如下图所示:

  造成欠拟合的主要原因是由于没有选择好合适的特征值,比如使用一次函数(y=kx+b)去拟合具有对数特征值的散落点(y=log2x),示例图如下所示:

  欠拟合和过拟合是机器学习中会遇到的问题,这两种情况都不是我期望看到的,因此要避免,关于如何处理类似问题,在后续内容中还会陆续讲解,本节只需要大家熟悉并理解常见的机器学习术语和一些概念即可。

  本节需要知道的知识点:

  1、机器学习常用术语?

  2、假设函数 损失函数?

  3、拟合 过拟合 欠拟合?

  参考资料:《C语言中文网-机器学习算法》

  10.基本人工智能工具的介绍与使用

  1 python

  这个不用我多说,自己去安装,教程可以参考我的博客:

  三小时快速入门Python第一篇--原始数据类型与操作

  2 numpy (矩阵计算)

  NumPy(https://numpy.org/)属于 Python 的第三方扩展程序包,它是 Python 科学计算的基础库,提供了多维数组处理、线性代数、傅里叶变换、随机数生成等非常有用的数学工具。

  NumPy 的安装方式非常简单,在安装好 Python 的基础上使用包管理器来安装,命令如下所示:

  

pip install numpy

 

  

 

  使用案例:

  

a=np.array([[1,2],[3,4]])

 

  b=np.array([[4,3],[2,1]])

  # 矩阵乘法

  c=np.matmul(a,b)

  # 普通逐个相乘

  result=np.multiply(a,b)

  #1 2 4 3

  #3 4 2 1

  print(c)

  print(result)

  

 

  3 pandas(读取文件)

  ​ Pandas 属于 Python 第三方数据处理库,它基于 NumPy 构建而来,主要用于数据的处理与分析。我们知道对于机器学习而言数据是尤为重要,如果没有数据就无法训练模型。Pandas 提供了一个简单高效的 DataFrame 对象(类似于电子表格),它能够完成数据的清洗、预处理以及数据可视化工作等。除此之外,Pandas 能够非常轻松地实现对任何文件格式的读写操作,比如 CSV 文件、json 文件、excel 文件。

  ​ Pandas 安装非常简单,同样可以使用 pip 包管理器完成安装,如下所示:

  

pip install pandas

 

  

 

  使用参考:

  

import pandas as pd

 

  #前提是自己有data.csv 要不然报filenotfound错误

  data = pd.read_csv(data.csv)

  # 取x列

  x = data.loc[:,x]

  print(x)

  y = data.loc[:,y]

  print(y)

  z = data.loc[:,y][x 20]

  print(z)

  np_array = np.array(x)

  print(np_array)

  x.to_csv(data_new.csv)

  

 

  4 Matplotlib(数据可视化)

  ​ Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是 Python 常用的 2D 绘图库,同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与 NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一。

  案例

  

import matplotlib

 

  from matplotlib import pyplot as plt

  %matplotlib inline

  x = [1,2,3,4,5]

  y = [5,4,3,2,1]

  # 绘制连线图

  plt.plot(x,y)

  plt.title(y vs x)

  plt.xlabel(x)

  plt.ylabel(y)

  plt.show( )

  #绘制散点图

  plt.scatter(x,y)

  plt.show( )

  

 

  5 Scikit-Learn(算法库)

  ​ 最后介绍机器学习中的重要角色 Scikit-Leran(官网:https://scikit-learn.org/stable/),它是一个基于 Python 语言的机器学习算法库。Scikit-Learn 主要用 Python 语言开发,建立在 NumPy、Scipy 与 Matplotlib 之上,它提供了大量机器学习算法接口(API),因此你可以把它看做一本“百科全书”。由于 Scikit-Learn 的存在极大地提高了机器学习的效率,让开发者无须关注数学层面的公式、计算过程,有更多的更多的时间与精力专注于业务层面,从而解决实际的应用问题。

  ​ Scikit-Learn 的基本功能主要被分为六大部分:分类,回归,聚类,数据降维,模型选择和数据预处理。本教程将围绕机器算法的讲解 Scikit-Learn 实际的应用。 Scikit-Learn 安装也非常简单,执行以下命令即可安装:

  

pip install scikit-learn

 

  

 

  11.线性回归

  11.1回归分析

  回归分析:根据数据,确定两种或两种以上变量间相互依赖的定量关系。

  函数表达式为:

  ​ y=f(x1,x2,x3...xn)

  如 y=ax+b, y=ax1+bx2+c

  x代表的就是指的影响因素, 如 y=ax1+bx2+c可以指:多大面积 和 是不是学区房

  11.2线性回归

  线性回归:回归分析中,变量与因变量存在线性关系。

  函数表达为: y=ax+b

  11.3房价预测案例

  问题:面积110平米售价150万是否值得投资?

  步骤:

  1.设P为价格A为面积,确定P、A间的定量关系。即P=f(A)

  2.根据关系预测合理价格。P=f(110)

  3.做出判断

  问题:如何求出函数P=f(A)

  使用线性模型y=ax+b去拟合现有的数据。那么问题就在于如何去寻找a和b。

  哪一个a和b比较合适呢?

  11.4梯度下降法

  ​ 梯度下降法是寻找极小值的一种方法。通过向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索,直到在极小点收敛。

  梯度下降法案例

  逐渐接近极小值点(p=2)

  梯度下降法动态图:

  梯度下降法

  重复计算直到收敛

  效果展示:

  其他线性回归案例

  1.百万人口/医生预测平均寿命问题

  年龄预测身高

  3.住宅面积预测房价

  12.-实战:Sklearn求解线性回归问题

  1 实战目标

  ​ 基于generated_data.csv数据,建立线性回归模型,预测x=3.5对应的y值,评估模型表现。

  ​ 学会用Sklearn求解线性回归问题,寻找a、b (y = ax + b) 并且评估模型的好坏。

  数据如下:

  2 步骤

  第一步:

  

#加载数据

 

  import pandas as pd

  data = pd.read_csv(generated_data.csv)

  data.head()

  x = data.loc[:,x]

  y = data.loc[:,y]

  print(x,y)

  #visualize the data

  from matplotlib import pyplot as plt

  plt.figure(figsize=(20,20))

  #scatter:代表散点图

  plt.scatter(x,y)

  plt.show()

  #set up a linear regression model 设置一个线性回归模型

  from sklearn.linear_model import LinearRegression

  lr_model = LinearRegression()

  #np.array:进行类型转换 reshape:转换维度,要不然绘制不进去

  import numpy as np

  x = np.array(x)

  x = x.reshape(-1,1)

  y = np.array(y)

  y = y.reshape(-1,1)

  print(type(x),x.shape,type(y),y.shape)

  print(type(x),x.shape)

  #训练模型

  lr_model.fit(x,y)

  y_predict = lr_model.predict(x)

  print(y_predict)

  #预测3.5

  y_3 = lr_model.predict([[3.5]])

  print(y_3)

  print(y)

  #a\b 打印 y=ax+b

  a = lr_model.coef_

  b = lr_model.intercept_

  print(a,b)

  
y 与y’的均方误差(MSE):

  R方值(R2):

  MSE越小越好,R^2分数越接近1越好

  

# 计算y 与y’的均方误差(MSE)、R方值(R2_score):

 

  from sklearn.metrics import mean_squared_error,r2_score

  MSE = mean_squared_error(y,y_predict)

  R2 = r2_score(y,y_predict)

  print(MSE,R2)

  
1.实战任务

  基于 usa_housing _price.csv 数据,建立线性回归模型,预测合理房价:

  
1、作业1:以面积为输入变量,建立单因子模型, 评估模型表现,可视化线性回归预测结果

  
2、作业2:以income、house age、numbers of rooms、population、area为输入变量,建立多因子模型,评估模型表现

  
3、预测 Income=65000,,House Age=5, Number of Rooms=5, Population=30000, size=200的合理房价

  
plt.scatter(data.loc[:,Avg. Area Income],data.loc[:,Price])

  plt.title(Price VS Income)

  fig2 =plt.subplot(232)

  plt.scatter(data.loc[:,Avg. Area House Age],data.loc[:,Price])

  plt.title(Price VS House Age)

  fig3 =plt.subplot(233)

  plt.scatter(data.loc[:,Avg. Area Number of Rooms],data.loc[:,Price])

  plt.title(Price VS Number of Rooms)

  fig4 =plt.subplot(234)

  plt.scatter(data.loc[:,Area Population],data.loc[:,Price])

  plt.title(Price VS Area Population)

  fig5 =plt.subplot(235)

  plt.scatter(data.loc[:,size],data.loc[:,Price])

  plt.title(Price VS size)

  plt.show()

  #定义 x 和 y

  X = data.loc[:,size]

  y = data.loc[:,Price]

  y.head()

  # 转换维度

  X = np.array(X).reshape(-1,1)

  print(X.shape)

  
from sklearn.metrics import mean_squared_error,r2_score

  mean_squared_error_1 = mean_squared_error(y,y_predict_1)

  r2_score_1 = r2_score(y,y_predict_1)

  print(mean_squared_error_1,r2_score_1)

  fig6 = plt.figure(figsize=(8,5))

  plt.scatter(X,y)

  plt.plot(X,y_predict_1,r) # r:代表红色

  plt.show()

  

 

  作业2

  

#定义多因子x

 

  #删除掉Price列

  X_multi = data.drop([Price],axis=1)

  X_multi

  #第二个线性模型

  LR_multi = LinearRegression()

  #train the model

  LR_multi.fit(X_multi,y)

  #多因子预测

  y_predict_multi = LR_multi.predict(X_multi)

  print(y_predict_multi)

  #模型评估

  mean_squared_error_multi = mean_squared_error(y,y_predict_multi)

  r2_score_multi = r2_score(y,y_predict_multi)

  print(mean_squared_error_multi,r2_score_multi)

  print(mean_squared_error_1)

  fig7 = plt.figure(figsize=(8,5))

  plt.scatter(y,y_predict_multi)

  plt.show()

  fig8 = plt.figure(figsize=(8,5))

  plt.scatter(y,y_predict_1)

  plt.show()

  X_test = [65000,5,5,30000,200]

  X_test = np.array(X_test).reshape(1,-1)

  print(X_test)

  y_test_predict = LR_multi.predict(X_test)

  print(y_test_predict)

  

 

  实战结果

  线性回归房价实战summary:

  1、通过搭建线性回归模型,实现单因子的房屋价格预测;

  2、在单因子模型效果不好的情况下,通过考虑更多的因子,建立了多因子模型;

  3、多因子模型达到了更好的预测效果,r2分数为0.91;

  4、实现了预测结果的可视化,直观对比预测价格与实际价格的差异。

  14.逻辑回归

  ​ 我们知道有监督学习分为“回归问题”和“分类问题”,前而我们已经认识了什么是“回归问题”,从本节开始我们将讲解“分类问题”的相关算法。在介绍具体的算法前,我们先聊聊到底什么是分类问题。

  1.什么是分类问题?

  ​ 其实想要理解“分类”问题非常的简单,我们不妨拿最简单的“垃级分类处理”的过程来认识一下这个词。现在考虑以下场景:

  ​ 小明拎着两个垃圾袋出门倒垃级,等走到垃级回收站的时候。小明发现摆放着两个垃级桶。上面分别贴着“可回收”与“不可回收”。小明经过自己的判断后,把自己右手的垃极故进了贴有“不可回收”的垃极桶内,而左手的垃圾袋放进了“可回收”的垃圾桶内,最终完成了这次倒垃吸的过程。

  ​ 其实上述“倒垃级”的案例就说明了“分类问题”的过程。“可回收”与“不可回收”是两种预测分类,而小明是主观判断的个体,他通过自己日常接触的知识对“垃圾种类”做出判断,我们把这个程称作“模型训练”,只有通过“训练”才可以更加准确地判断“垃吸”的种类。小明进行了两次投放动作,每一次投故都要对“垃圾”种类做出预先判断,最终决定投放到哪个垃吸桶内。这就是根据模型训练的结果进行预测的整个过程。

  ​ 除了垃圾分类之外,我们常见的还有垃圾邮件分类,一般来说我们如何去判断邮件是否是垃圾邮件?一般来说只要发件人中含一些乱七八遭的符号例如「sda# *sd@123.com」、「dsah%qwe@889.com」并且邮件中包含「赌博」「博彩」「同城yp」「百家乐」这些彩票会被我们认为是垃圾邮件。

  下面对上述分类过程做简单总结:

  
模型训练:以小明为主体,把他所接受的知识、经验做为模型训练的参照。(获取特征)·

  
​ 分类问题是当前机器学习的研究热点,它被广泛应用到各个领域,比图像识别、垃圾邮件处理、预测天气、疾病诊断、文字识别等等。“分类问题”的预测结果是离散的,它比线性回归要更加复杂,那么我们应该从何处着手处理“分类问题”呢,这就需要使用到我们的分类算法。

  1.分类算法

  1.1逻辑回归算法

  1.2.KNN近邻算法

  1.3.决策树

  1.4神经网络

  2 Logistic回归算法

  也许乍一看算法名字,你会认为它是用来解决“回归问题”的算法,但其实它是针对“分类问题”的算法。

  2.1逻辑回归介绍

  ​ Logistic回归算法,又叫做逻辑回归算法,或者LR算法(Logistic Regression)。分类问题同样也可以基于“线性模型”构建。“线性模型”最大的特点就是“直来直去”不会打弯,而我们知道,分类问题的预测结果是“离散的”,即对输出数据的类别做判断。比如将类别预设条件分为“0”类和“1”类(或者“是”或者“否”)那么图像只会在“0”和“1”之间上下起伏,如下图所示:

  此时你就可能会有很多疑问,线性回归函数不可能“拟合”上述图像。没错,所以接下来我们要学习另一个线性函数Logistic函数。

  ​ 注意:在机器学习中,L0gsc函数通常用来解决二元分类问题,也就是涉及两个预设类别的问。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: