問題一:
你簡歷中上過的數據挖掘、機器學習等課程,是學校的研究生課程還是自己單獨學習的;回答道:研究生課程有學習,自己單獨私下也有學習
1、監督學習和無監督學習的區別?分類回歸一般屬於哪種?聚類屬於哪種?請舉例你知道的相關有監督學習和無監督學習算法
1:監督學習和無監督學習的區別在於:監督學習數據樣本是帶有標簽的,而無監督學習的數據樣本是沒有標簽的;分類回歸一般屬於監督學習,聚類是無監督學習;無監督學習大致又有層次聚類、核密度聚類等(本人對無監督研究並不是很深入,大致答了)常見的監督學習:KNN、決策樹(后面陸續問到決策樹有幾種,區別是什么)、SVM(后續問到常用的核函數有哪些)、隨機森林、xgboost、朴素貝葉斯、邏輯回歸、神經網絡;無監督學習主要有:K-means,基於密度聚類、基於譜聚類、ISO-Forest接觸的等等
2、生成式模型和判別式模型的區別
2:判別式模型建模過程主要是依靠代價准則函數,通過代價准則函數,擬合出一個最優判別方程,進行判別,而生成式模型主要是依靠挖掘數據的內在規則(因此數據量要求也高),生成一個概率估計;例如邏輯回歸和朴素貝葉斯,前者是判別模型,后者是生成模型
3、你對集成算法有了解嗎?為什么集成要求的是弱分類器,弱分類器的定義是什么?而不能是強分類器?GBDT和xgboost的區別是什么?
3:對集成學習有一定的了解;弱分類器(這個貌似沒有嚴格的理論定義),大致的意思就是分類性能較弱的一類分類器;集成學習可以是一類強分類器的集合,但是強分類器的話,可能每個分類器都擬合的很好,充分挖掘了數據的內在信息,因此無法實現多樣性,使得集成之后的性能也就是近似於若干個強分類器中的一個,而沒有達到我們需要的再次進化分類器性能的目的;至於GBDT和RF的區別在於:GBDT是一個串行建樹的過程,是boost算法,通過生成下一棵決策樹,來擬合數據集,使得模型在訓練過程中盡量的減少bias;而RF是一個bagging算法,通過並行訓練,生成模型,最后結果輸出子樹的投票結果
4、問了一下第一篇論文的一些細節東西
4:這里略過
5、現在開始問一下數據結構和JAVA相關的東西(沒怎么學過,以下問題簡答一下,怕誤導人,大家看看就好);數據結構里面你了解哪些數據結構,Java的繼承、多態、重載、Java序列化和反序列化你講解一下
5:了解過鏈表、數組、隊列、樹、堆棧等;JAVA重載是可以命名若干個函數名一樣的函數,但是由於函數輸入類型不一樣,使得我們可以通過輸入類型來載入需要的函數模塊;至於繼承,就是子類繼承父類,使得子類能夠繼承和使用父類的一些功能和變量(再難一點估計就向上轉型和向下轉型了,不過沒問);多態是指一個對象能夠有多種表現形式?序列化就是將對象轉化為字節序的過程,將字節序轉化為對象的過程即反序列化;作用在於,通過序列化之后,能夠將數據從內存中存入到磁盤進行保存,應對高並發情況,減小內存的壓力;
6、Python常用的數據結構有哪些;舉例說一下,然后又問到DataFrame的用途,List 和Set 區別,如何對List去重
6:Python數據結構:array、list、set、tuple、dict、(DataFrame、Series)屬於Pandas;DataFrame存在一些內置函數,如merge等,能夠方便的進行數據處理和數據分析,plot函數能夠方便進行數據展示,List去重就是:list(set(list))
7、鏈表和數組的區別,哪個放連續內存,哪個可以放不連續內存,插入時哪個更快
7:鏈表有指針,能夠讓上一位數據指到下一位,而數組是不存在這些的,相當於一整塊數組,因此數組放連續內存,而鏈表可以放在不連續內存,因此指針的存在,插入時鏈表應該更快的;
8、深度學習了解嗎?CNN了解嗎
8:了解一些,做過一個人臉識別在項目,后面沒深問,不清楚
9、Linux查看內存,查看磁盤空間
9:忘記復習這塊了,在公司也沒怎么常用,看內存可以用ps,top;磁盤空間df,文件使用內存du;
10、如何在HDFS上看數據
10:Hadoop fs -text -----|less;Hadoop fs -head or -tail ; Hadoop fs -cat
11、項目是離線的還是Streaming,數據量有多少,數據存放在哪里?輸出到哪里?
11:離線的項目,在Spark下訓練好,上線的,數據量大概在500W條,每條450W維度,存儲格式Libsvm,存在在Hive,輸出到HDFS上面
12、碧桂園智慧城市里面用到了什么AI技術
12:是一個調研工作,在溝通中,暫時沒有具體落地
13、有什么想問的嗎?
13.1:我有什么不足? 回答:公司規定,不能說,無果
13.2:部門的數據研發主要干什么;多端數據/實時數據流/數據挖掘.......了解清楚了
14:面試結束了,一個小時,后面覺得沒考我代碼,來了一個補刀,三個問題
14.1、實現一個環形buffer類接口,插入數據和讀數據、
14.2、用加法實現乘除減操作
14.3、二分查找
代碼早上發過去了,剛才收到消息,功能都實現了,但是有一些小問題:命名問題(環形接口)、異常抓取和處理問題(乘除減法問題)、邊界問題(二分查找);畢竟還是年輕,有些問題考慮還不是很周到,有待加強!三段代碼貼在后面了。
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 6 23:15:28 2018
@author: dapeng
Function:Buffer interface
Input:List and Int
"""
class Solution:
def __init__(self):
self.read = 0
self.write = 0
self.buffer = [0] * 100
self.number = 0
def Append(self,List):
if type(List) is list:
if self.number == 100 and self.read == self.write:
print("Buffer is enough")
else:
for j in List:
self.buffer[self.write] = j
self.number += 1
self.write += 1
if self.write>= 100:
self.write = 0
print("initial write pointer")
break
print(self.write)
return (self.buffer)
else:
print("Please Input Type of list")
def Read(self,num):
if type(num) is int:
if self.number ==0 and self.read == self.write:
print("buffer is empty")
else:
result_read = []
for k in range(self.read,self.read + num):
result_read.append(self.buffer[k])
self.buffer[k] = 0
self.read += 1
self.number -= 1
if self.read >=100:
self.read =0
if self.number <= 0:
print("Buffer has not element")
break
return result_read
print(self.read)
else:
print("Please Input Type of int")
solution = Solution()
List = [i for i in range(1,10)]
result_append = solution.Append(List)
result_read = solution.Read(5)
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 6 15:28:50 2018
@author: dapeng
Function: Using the addition completes Subtraction,Multiplication and Division
Input: org_value(Int),method(Str),next_bumber(Int)
Method:Subtraction,Multiplication and Division
Return: Completed value
"""
def Add_complete_three_function(org,method,next_number):
if type(org) is int and type(next_number) is int:
if method == 'Multiplication':
complete_val = 0
if (org>0 and next_number>0) or (org<0 and next_number<0):
org = abs(org)
next_number = abs(next_number)
while next_number>0:
next_number = next_number + int('-' + str(1))
complete_val += org
return complete_val - next_number
elif org<0 or next_number<0:
org = abs(org)
next_number = abs(next_number)
while next_number>0:
next_number = next_number + int('-' + str(1))
complete_val += org
return int('-' + str(complete_val))
elif org==0 or next_number==0:
return 0
if method == 'Subtraction':
if next_number == 0:
return org
elif next_number<0:
return (org + abs(next_number))
elif next_number>0:
return (org + int('-' + str(next_number)))
if method == 'Division':
if abs(next_number) == 0:
print("Divisor can not be 0")
elif (org>0 and next_number>0) or (org<0 and next_number<0):
org = abs(org)
next_number = abs(next_number)
num = 0
count = 0
while count<= org:
num +=1
count += next_number
return num-1
elif (org>0 and next_number<0) or (org<0 and next_number>0):
org = abs(org)
next_number = abs(next_number)
num = 0
count = 0
while count<= org:
num +=1
count += next_number
return int('-' + str(num-1))
else:
print("please input reasonable Type and Method")
result = Add_complete_three_function(-9,'Subtraction',-10)
print(result)
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 6 15:28:50 2018
@author: dapeng
function: search
input_type:List and value
Flag: Flag = 1 indicates that the val was found
Flag = -1 is not
Return: Return val in List' index when Flag=1
others
"""
def Two_split_search(data,val):
if type(data) is list:
org = 0
end = len(data) - 1
Flag = -1
while org <= end:
mid = int((org + end)/2)
if val == data[mid]:
Flag = 1
break
elif val > data[mid]:
org = mid + 1
elif val < data[mid]:
end = mid -1
if Flag == 1:
return mid
else:
print("not find the val")
else:
print("the input type is List")
data = [1,2,3,5,6,7,9]
val = 10
result_index = Two_split_search(data,val)
print(result_index)
————————————————
版權聲明:本文為CSDN博主「Peng__Ge」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zehui6202/article/details/81474933