从勾股定理看机器学习

勾股定理的原因是直接三角形两垂直边长(或称较短两边)的平方和,等于斜边长的平方。

在勾股定理中,较短的两边长的平方和等于第三边的平方:

c^{2}=a^{2}+b^{2}

《玩命关头》打分的特征表
影片名称爱情、亲情跨国拍摄出现刀、枪飞车追逐动画
玩命关头578102

最近影片打分的特征表
影片名称爱情、亲情跨国拍摄出现刀、枪飞车追逐动画
复仇者联盟28857
决战中途岛56925
冰雪奇缘820010
双子杀手58883

列出4部影片与《玩命关头》的相似度,同时列出哪一部影片与《玩命关头》的相似度最高。

import math

film = [5, 7, 8, 10, 2]             # 玩命关头特征值
film_titles = [                     # 比较影片片名
    '复仇者联盟',
    '决战中途岛',
    '冰雪奇缘',
    '双子杀手',
]
film_features = [                   # 比较影片特征值
    [2, 8, 8, 5, 6],
    [5, 6, 9, 2, 5],
    [8, 2, 0, 0, 10],
    [5, 8, 8, 8, 3],
]

dist = []                           # 储存影片相似度值
for f in film_features:
    distances = 0
    for i in range(len(f)):
        distances += (film[i] - f[i]) ** 2
    dist.append(math.sqrt(distances))
    
min = min(dist)                     # 求最小值
min_index = dist.index(min)         # 最小值的索引

print("与玩命关头最相似的电影 : ", film_titles[min_index])
print("相似度值 : ", dist[min_index])
for i in range(len(dist)):
    print("影片 : %s, 相似度 : %6.2f" % (film_titles[i], dist[i]))

运行结果:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
与玩命关头最相似的电影 :  双子杀手
相似度值 :  2.449489742783178
影片 : 复仇者联盟, 相似度 :   7.14
影片 : 决战中途岛, 相似度 :   8.66
影片 : 冰雪奇缘, 相似度 :  16.19
影片 : 双子杀手, 相似度 :   2.45

[Done] exited with code=0 in 0.454 seconds

《双子杀手》与《玩命关头》最相似,《冰雪奇缘》与《玩命关头》差距最远。

联立不等式与机器学习

计算x和y的值

y=8-0.6x                #研发限制

y=17.5-2.5x        #包装限制

然后计算最大获得值

z=50x+50y        #求目标函数的最大获得值

import matplotlib.pyplot as plt
from sympy import Symbol, solve
import numpy as np
                                
x = Symbol('x')                         # 定义公式中使用的变量
y = Symbol('y')                         # 定义公式中使用的变量
eq1 = 8 - 0.6 * x - y                   # 方程式 1
eq2 = 17.5 - 2.5 * x - y                # 方程式 2
ans = solve((eq1, eq2))
print('x = {}'.format(int(ans[x])))
print('y = {}'.format(int(ans[y])))

z = 50 * int(ans[x]) + 50 * int(ans[y])
print('最大获利 = {} 万'.format(z))

运行结果:

[Running] python -u "c:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\tempCodeRunnerFile.py"
x = 5
y = 5
最大获利 = 500 万

[Done] exited with code=0 in 4.107 seconds

参考下列内容,绘制等式线条。

x>=0                        #商用软件生产数量

y>=0                        #App软件生产数量

y<=8-0.6x                #研发费用的限制

y<=17.5-2.5x        #包装费用的限制 

然后绘制下列通过点(5,5)的目标函数线条,同时标记点(5,5)。

y=-x+0.02z

因为最大获利是500万元,所以目标函数内容如下:

y=-x+10

import matplotlib.pyplot as plt
import numpy as np

plt.plot([0, 0], [20, 0])              # 绘函数直线公式 1
plt.plot([0, 0], [0, 20])              # 绘函数直线公式 2
                                
line3_x = np.linspace(0, 20, 20)
line3_y = [(8 - 0.6 * y) for y in line3_x]

line4_x = np.linspace(0, 20, 20)
line4_y = [(17.5 - 2.5 * y) for y in line4_x]

lineobj_x = np.linspace(0, 20, 20)
lineobj_y = [10 - y for y in lineobj_x]

plt.axis([0, 20, 0, 20])

plt.plot(line3_x, line3_y)              # 绘函数直线公式 3
plt.plot(line4_x, line4_y)              # 绘函数直线公式 4
plt.plot(lineobj_x, lineobj_y)          # 绘目标函数直线公式

plt.plot(5, 5, '-o')                    # 绘交叉点
plt.text(4.5, 5.5, '(5, 5)')            # 输出(5, 5)
plt.xlabel("Research")
plt.ylabel("UI")
plt.grid()                              # 加网格线
plt.show()

运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值