le111

 

 

1.在机器学习中,为什么我们通常将处理的对象(样本)表示成向量?

便于数学运算

便于编程

可以使同一个算法能够处理不同的任务(对象)

 

2.一个模型中通常包含无限个函数

3.监督学习的四个步骤:

收集数据,选择模型,定义模型中函数的好坏,找到最好的函数(缺一不可)

在梯度下降法中,根据起点的不同,优化算法很可能只能找到误差的局部最小值。

4.判决树推荐APP

一般我们的判决树属于二叉树,如果一个有用的用户的特征为“白领工作人员”,“蓝领工作人员”,“无工作人员”,则用三叉分是最好的选择。

 

5.贝叶斯分类器处理垃圾邮件

 

 

 

(1)在朴素贝叶斯垃圾邮件分类器中,用“朴素”这个词,是因为假定不同符号的出现是条件独立的。

(2)在Paul Graham的方法中,不用0.5,而是用0.9来判断一封邮件是否属于垃圾邮件,是为了确保丢到垃圾箱的都是垃圾邮件。

(2)在Paul Graham的方法中,如果将判断是否是垃圾邮件的概率0.9改为0.98,则正常邮件丢到垃圾箱的可能性更小,垃圾邮件不会被丢到垃圾箱的可能性更大。

 

6.K-means

 

 

 

 

 

 

 

 

在k-means聚类中,数据是根据数据到聚类中心的距离打上标签的。

 

 

 

在整数除法中,除法 / 总是返回一个浮点数,如果只想得到整数的结果,丢弃可能的分数部分,可以使用运算符 // 

注意:// 得到的并不一定是整数类型的数,它与分母分子的数据类型有关系

>>> 7//2

3

>>> 7.0//2

3.0

fabs() 方法返回数字的绝对值,如math.fabs(-10) 返回10.0

fabs() 函数类似于 abs() 函数,但是他有两点区别:

  • abs() 是内置函数。 fabs() 函数在 math 模块中定义。
  • fabs() 函数只对浮点型跟整型数值有效。 abs() 还可以运用在复数中。

count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置


list.count(obj)
统计某个元素在列表中出现的次数

 

count()方法语法:

str.count(sub, start= 0,end=len(string))

注意与collections.counter对比

删除list中的数据:

del list[2]

remove对比

试一下

for x in [1, 2, 3]: print(x, end=" ")

结果:1 2 3

 

extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。

extend()方法语法:

list.extend(seq)

注意:list.copy()和直接=赋值的区别:

Python 的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号,列表使用方括号。

有一句话不太明白

http://www.runoob.com/python3/python3-att-dictionary-copy.html

返回值:

返回一个字典的浅复制。

Dict.copy() 与 copy.copy(dict) 一样属于浅拷贝

同理有list.copy(),python2中没有list.copy,看一下py2中有没有

http://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html

直接赋值,浅拷贝和深拷贝的解析

集合:

a = set('abracadabra')

b = set('alacazam')

print(a)

print(b)

感觉有点陌生

s.add(x) s.update(x)的区别

thisset = set(("Google", "Runoob", "Taobao"))

thisset.add("facebook")

# add中elem不能是set,list等,只能是一个单一的元素

print(thisset)

thisset.update({1,3})

print(thisset)

thisset.update([1,4],[5,6])

print(thisset)

thisset.update("facebook")

print(thisset)

thisset.update({"facebooks"})

print(thisset)

创建一个set

三种方法都可以创建一个set?

a = set([9,4,5,2,6,7,1,8])

b = set((9,4,5,2,6,7,1,8))

c = {9,4,5,2,6,7,1,8}

1.创建一个含有一个元素的集合

>>> my_set = set(('apple',))

2.创建一个含有多个元素的集合

>>> my_set = set(('apple','pear','banana'))

3.如无必要,不要写成如下形式

>>> my_set = set('apple')

>>> my_set1 = set(('apple'))

删除set中的一个元素

s.discard( x ) 删除一个set中没有的元素,不会报错

s.remove( x ) 删除一个set中没有的元素,会报错

python3 中试一下下面的程序

a, b = 0, 1

while b < 1000:

    print(b, end=',') #关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符

    a, b = b, a+b

比较陌生:

count = 0

while count < 5:

   print (count, " 小于 5")

   count = count + 1

else:

   print (count, " 大于或等于 5")

 

比较陌生for。。。else

sites1 = ["Baidu", "Google","Runoob","Taobao"]

sites = []

for site in sites:

    if site == "Runoob":

        print("菜鸟教程!")

        break

    print("循环数据 " + site)

else:

    print("没有循环数据!")

print("完成循环!")

 

循环语句可以有 else 子句,它在穷尽列表(for循环)或条件变为 false (while循环)导致循环终止时被执行,但循环被break终止时不执行

比如查找质数的例子

for n in range(2, 10):

    for x in range(2, n):

        if n % x == 0:

            print(n, '等于', x, '*', n//x)

            break

    else:

        # 循环中没有找到元素

        print(n, ' 是质数')

没看明白:创建一个迭代器:http://www.runoob.com/python3/python3-iterator-generator.html

生成器

函数:

strings, tuples, 和 numbers 是不可更改(immutable)的对象,而 list,dict 等则是可以修改(mutable)的对象。

不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。

 

可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

 

python 函数的参数传递:

 

不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

 

可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

__name__属性,的用法,还有点不太理解

Pickle模块

下边的程序有点看不明白

class Vector:

    def __init__(self, a, b):

        self.a = a

        self.b = b

    def __str__(self):

        return 'Vector (%d, %d)' % (self.a, self.b)

    def __add__(self, other):

        return Vector(self.a + other.a, self.b + other.b)

v1 = Vector(2, 10)

v2 = Vector(5, -2)

#不太明白此操作过程

print (v1 + v2)

 

魔法函数,并不和某一个class挂钩,而是每个class都可以用的

Calss 和 def 都是可调用对象

鸭子类型和多态

class Cat(object):

    def say(self):

        print "I'm cat"

 

class Dog(object):

    def say(self):

        print "I'm dog"

    def __getitem__(self, item):

        return "boby"

class Duck(object):

    def say(self):

        print "I'm duck"

 

class Company():

    def __init__(self, employee_list):

        self.employee = employee_list

        # getitem 使得Company实例可以迭代

    def __getitem__(self, item):

        return self.employee[item]

# anmial = Cat

# anmial().say()

 

# 多态继承

# animal_list = [Cat, Dog, Duck]

# for animal in animal_list:

#     animal().say()

 

a = ["boby1", "boby2"]

# b = ["boby2", "boby1"]

# name_tuple = ["boby3", "boby4"]

# name_set = set()

# name_set.add("boby5")

# name_set.add("boby6")

company = Company([1,2,3])

a.extend(company) #extend(self, iterable)

print a

python中的抽象基类不能实例化

抽象基类不是很懂

# 检查某个类是否有某种方法

from collections.abc import Sized

class Company():

    def __init__(self, employee_list):

        self.employee = employee_list

        # getitem 使得Company实例可以迭代

    def __len__(self):

        return len(self.employee)

com = Company(["boby1", "boby2"])

print hasattr(com, "__len__")

isinstance(com, Sized)

print len(com)

collections 中的abc 与全局的abc 有什么区别

使用isinstance来判断类型

class A:

    pass

class B(A):

    pass

b = B()

# 尽量使用isinstance 来判断类型

print isinstance(b, B)

print isinstance(b, A)

 

# "=" and is

print type(b) == B #判断值是否相等

print type(b) is A #判断id是否相同

print type(b) is B

 

# 类变量和实例变量

class A:

    aa=1 #类变量

    def __init__(self, x, y):

        self.x = x  #self表示实例

        self.y = y

 

a = A(2,3)

A.aa=11 #修改类变量

a.aa =100 #在对象上新建一个变量

print a.x, a.y, a.aa  #从下往上查找

print A.aa

# print A.x #x是绑定到实例上的

b = A(3,5)

print b.aa

比较陌生for。。。else

sites1 = ["Baidu", "Google","Runoob","Taobao"]

sites = []

for site in sites:

    if site == "Runoob":

        print("菜鸟教程!")

        break

    print("循环数据 " + site)

else:

    print("没有循环数据!")

print("完成循环!")

 

循环语句可以有 else 子句,它在穷尽列表(for循环)或条件变为 false (while循环)导致循环终止时被执行,但循环被break终止时不执行

比如查找质数的例子

for n in range(2, 10):

    for x in range(2, n):

        if n % x == 0:

            print(n, '等于', x, '*', n//x)

            break

    else:

        # 循环中没有找到元素

        print(n, ' 是质数')

没看明白:创建一个迭代器:http://www.runoob.com/python3/python3-iterator-generator.html

生成器

函数:

strings, tuples, 和 numbers 是不可更改(immutable)的对象,而 list,dict 等则是可以修改(mutable)的对象。

不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。

 

可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

 

python 函数的参数传递:

 

不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。

 

可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

__name__属性,的用法,还有点不太理解

Pickle模块

下边的程序有点看不明白

class Vector:

    def __init__(self, a, b):

        self.a = a

        self.b = b

    def __str__(self):

        return 'Vector (%d, %d)' % (self.a, self.b)

    def __add__(self, other):

        return Vector(self.a + other.a, self.b + other.b)

v1 = Vector(2, 10)

v2 = Vector(5, -2)

#不太明白此操作过程

print (v1 + v2)

 

魔法函数,并不和某一个class挂钩,而是每个class都可以用的

Calss 和 def 都是可调用对象

鸭子类型和多态

class Cat(object):

    def say(self):

        print "I'm cat"

 

class Dog(object):

    def say(self):

        print "I'm dog"

    def __getitem__(self, item):

        return "boby"

class Duck(object):

    def say(self):

        print "I'm duck"

 

class Company():

    def __init__(self, employee_list):

        self.employee = employee_list

        # getitem 使得Company实例可以迭代

    def __getitem__(self, item):

        return self.employee[item]

# anmial = Cat

# anmial().say()

 

# 多态继承

# animal_list = [Cat, Dog, Duck]

# for animal in animal_list:

#     animal().say()

 

a = ["boby1", "boby2"]

# b = ["boby2", "boby1"]

# name_tuple = ["boby3", "boby4"]

# name_set = set()

# name_set.add("boby5")

# name_set.add("boby6")

company = Company([1,2,3])

a.extend(company) #extend(self, iterable)

print a

python中的抽象基类不能实例化

抽象基类不是很懂

# 检查某个类是否有某种方法

from collections.abc import Sized

class Company():

    def __init__(self, employee_list):

        self.employee = employee_list

        # getitem 使得Company实例可以迭代

    def __len__(self):

        return len(self.employee)

com = Company(["boby1", "boby2"])

print hasattr(com, "__len__")

isinstance(com, Sized)

print len(com)

collections 中的abc 与全局的abc 有什么区别

使用isinstance来判断类型

class A:

    pass

class B(A):

    pass

b = B()

# 尽量使用isinstance 来判断类型

print isinstance(b, B)

print isinstance(b, A)

 

# "=" and is

print type(b) == B #判断值是否相等

print type(b) is A #判断id是否相同

print type(b) is B

 

# 类变量和实例变量

# 类和实例属性的查找顺序

class D:

    pass

class C(D):

    pass

class B(D):

    pass

class A(B,C):

    pass

 

print A.__mro__

静态方法:@staticmethod

类方法:@classmethod

class Date:

    def __init__(self, year, month, day):

        self.year = year

        self.month = month

        self.day = day

    def tommorrow(self):

        self.day += 1

    #静态方法

    @staticmethod

    def parse(data_str):

        # data_str = "2019-07-31"

        year, month, day = tuple(data_str.split("-"))

        return Date(int(year), int(month), int(day))

    #类方法,静态方法与类方法的区别

    @classmethod

    def form_string(cls, data_str):

        year, month, day = tuple(data_str.split("-"))

        return cls(int(year), int(month), int(day))

 

    def __str__(self):

        return "{year}/{month}/{day}".format(year = self.year, month = self.month, day = self.day)

 

class User:

    def __init__(self, birthday):

        self.__birthday = birthday  # 私有属性,外部不能获取,子类也不能获取,只能通过公共的方法来访问

 

    def get_age(self):

        return 2018 - self.__birthday.year

 

if __name__ == "__main__":

 

    data = Date(2019,8, 31)

    print data

    data.tommorrow()

    print data

    data_str = "2019-07-31"

    # year, month, day = tuple(data_str.split("-"))

    data1 = Date.parse(data_str)

    print data1

    data2 = Date.form_string(data_str)

    print data2

 

    user = User(Date(1990, 2, 1))

    print user._User__birthday

    print user.get_age()

Python的自省机制

# 自省是通过一定的机制查询到对象的内部结构

 

class Person:

    '''

    ren

    '''

    name="user"

class Student(Person):

    def __init__(self, school_name):

        self.school_name = school_name

if __name__ == "__main__":

    user = Student(u"慕课网")

    #通过__dict__ 查询属性

    print user.__dict__

    user.__dict__["school_addr"] = "bj"

    print user.school_addr

    print user.name

    print user.school_name

    print dir(user)  # 功能发、更强大,列出的更全

    print user.__dict__

print Person.__dict__

#supper 的执行顺序同__mro__的执行顺序,而不是单纯的调用父类

  1. 两数之和

class Solution(object):

    def twoSum(self, nums, target):

        """

        :type nums: List[int]

        :type target: int

        :rtype: List[int]

        """

        map = {}

        res = []

        for i in range(len(nums)):

            complement = target - nums[i]

            if complement in map.keys():

                res.extend([map[complement], i])

                return res

            map[nums[i]] = i

 

if __name__ == "__main__":

    # nums = input()

    # target = input()

    nums = [2, 7, 11, 15]

    target = 26

    so = Solution()

print so.twoSum(nums, target)

# 387. 字符串中的第一个唯一字符

class Solution(object):

    def firstUniqChar(self, s):

        """

        :type s: str

        :rtype: int

        """

        freq = [0]*26

        for c in s:

            freq[ord(c)-ord('a')] += 1

        for i in range(len(s)):

            if freq[ord(s[i])-ord('a')] == 1:

                return i

        return -1

if __name__ == "__main__":

    s = input().strip()

    so = Solution()

print so.firstUniqChar(s)

#加括号

 

 

发布了82 篇原创文章 · 获赞 20 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/zhao_crystal/article/details/82349625
le