предисловие
Что нам нужно сделать, так это сделать это самостоятельно, просканировать информацию на сайте аренды на 58.com, а затем использовать данные для прогнозирования цены на неизвестное жилье.
Исходный код состоит из трех частей: машинного обучения, веб-интерфейса и сканера.
Прогноз в основном использует регрессионное прогнозирование, а результаты прогнозирования относительно просты.В рамках этого проекта мы можем просто изучить регрессионное прогнозирование на основе Python.
В этой статье реализованы три алгоритма прогнозирования регрессии:
1. Регрессия опорных векторов (SVR)
2. Логистическая регрессия
3. И регрессия хребта (регрессия L2) с использованием трюков ядра
Процесс реализации
Полный код проекта выложен на github, а реализация этой части здесь:
https://github.com/TomorrowIsBetter/crawler/tree/master/price_prediction
Файл index.csv в этом каталоге является частью извлеченных файловых данных. Мы можем напрямую посмотреть на формат файла:
_id,date,areas,square,methods,price,direction,type,houseAreas
http://cc.58.com/zufang/34009015301200x.shtml,1.53E+12,0,190,1,20000,0,4 комнаты, 2 зала, 2 ванные комнаты, CITIC City (Вилла)
http://cc.58.com/zufang/33977466998861x.shtml,1.53E+12,0,190,1,20000,0,4 комнаты, 2 зала, 2 ванные комнаты, CITIC City (Вилла)
http://cc.58.com/zufang/32214749419981x.shtml,1.53E+12,5,400,1,15000,0,4 комнаты, 3 зала, 3 ванные комнаты, Sunac Shangcheng
http://cc.58.com/zufang/34129082983861x.shtml,1.53E+12,0,500,1,15000,0,5 Комната 3 Зал 2 Ванная комната, Чжунхай Рейн Восточный округ
Поскольку 58.com находится в городах первого уровня, таких как Пекин, обычно никто не арендует и не публикует недвижимость там, а большая часть данных поступает от посредников. Тем не менее, доступность 58 в городах второго и третьего уровня по-прежнему хорошая, поэтому собранные здесь данные — это данные по городам второго и третьего уровня в Китае.
обучение модели
Алгоритм представляет собой метод статистического обучения, реализованный с помощью библиотеки scikit-learn на основе языка Python. Часть кода выглядит следующим образом:
def normalization(data,tag=""):
mean = data.mean()
maximum = data.max()
minimum = data.min()
print(tag,mean,maximum,minimum)
return (data - mean) / (maximum - minimum)
df = pandas.read_csv("index.csv")
df = shuffle(df)
df = shuffle(df)
square = df['square'].values
square = normalization(square)
areas = df['areas'].values / 5
direction = df['direction'].values / 4
price = df['price'].values
#price = normalization(price)
print(areas.shape,square.shape,direction.shape)
data = np.array([areas,square,direction])
data = data.T
train_fraction = .8
train_number = int(df.shape[0] * train_fraction)
X_train = data[:train_number]
X_test = data[train_number:]
y_train = price[:train_number]
y_test = price[train_number:]
print(np.max(price))
# model
clf = GridSearchCV(SVR(kernel='rbf', gamma=0.1),{"C": [1e0, 1e1, 1e2, 1e3], "gamma": np.logspace(-2, 2, 5)},cv=5)
#clf = GridSearchCV(LogisticRegression(),{"C":[1e0,1e1,1e2,1e3],"random_state":list(range(10))},cv=5)
#clf = GridSearchCV(KernelRidge(kernel='rbf', gamma=0.1), {"alpha": [1e0, 1e1, 1e2, 1e3], "gamma": np.logspace(-2, 2, 5)},cv=5)
clf.fit(X_train,y_train)
result = clf.score(X_train,y_train)
test = clf.score(X_test,y_test)
c = clf.best_params_
y = clf.predict(X_test)
x = list(range(len(y)))
plt.subplot(2,1,1)
plt.scatter(x=x,y=y,color='r')
plt.scatter(x=x,y=y_test,color='g')
print(clf.best_params_,result,test)
deviation = y - y_test
deviation = deviation.flatten()
deviation = abs(deviation)
print(np.median(deviation))
plt.subplot(2,1,2)
plt.hist(deviation,10)
joblib.dump(clf,"model.m")
plt.show()
Полный код здесь:
https://github.com/TomorrowIsBetter/crawler/blob/master/price_prediction/train.py
Код пишется наспех и небрежно, формат кодирования недостаточно стандартизирован.
Описание модели
Кодекс в основном разделен на следующие части:
1. Предварительная обработка данных: загрузка данных, скремблирование данных, нормализация данных
2. Разделение набора данных: разделите набор данных на набор для обучения и набор для проверки.
3. Обучите модель: автоматически проверяйте лучшие гиперпараметры и обучайте модель с помощью обучающего набора.
4. Визуализация данных: визуализируйте результаты прогнозирования и распределение отклонений.
Нормализованный
Нормализация модели достигается по следующей формуле:
Tickets.WeChat.QQ.com/Yes/A8ex OL7IT…
Среди них часть категории — это необычная категория, отмеченная меткой {0,1,...,N}, которая при нормализации может быть напрямую разделена на N.
Данные установлены не по порядку
Набор обучающих данных должен быть зашифрован, чтобы предотвратить искажение обучающих данных и вызвать отклонения в результатах прогнозирования.
Если вы хотите наблюдать за эффектом, вы можете закомментировать эти две строки кода:
df = shuffle(df)
df = shuffle(df)
После этого вы интуитивно увидите результаты прогнозирования модели, вызванные обучением на непоследовательных данных.
разделение набора данных
При этом используется метод перекрестной проверки, который делит набор данных на две части: обучающий набор и набор проверки, Фактически, когда есть много наборов данных, таких как глубокое обучение, он обычно делится на три части: обучающий набор, тестовый набор и проверочный набор.Здесь данных относительно мало, соотношение обучающего набора и проверочного набора составляет 8: 2
Тестовый эффект
Как показано на рисунке, это визуальное изображение после запуска программы:
Зеленый — это фактическое значение выборки, а красный — прогнозируемый результат. Как видно из приведенного выше рисунка, прогнозируемый результат все еще в порядке; на следующем рисунке показано отклонение между прогнозируемым результатом и фактическим значением, и отклонение отображается в виде гистограммы. Можно видеть, что общее отклонение представляет собой распределение со смещением влево, в основном сосредоточенное в интервале [0,500], что указывает на то, что модель достигла эффекта прогнозирования.
Суммировать
В github есть данные тренировочного набора и другие части реализации, вы можете обратиться к следующему:
https://github.com/TomorrowIsBetter/crawler
Среди них эта часть контента находится в каталоге price_prediction, а другие части — это сканер, реализованный Node.js, и веб-интерфейс, реализованный AntDesign.Если вас интересует веб-интерфейс, вы также можете узнать об этом.
Здесь мы говорим только о конкретной реализации.Если вас интересуют области больших данных, машинного обучения, системной архитектуры и т. д., вы можете взглянуть на этот курс:«Овладение библиотекой машинного обучения Spark, развитие навыков работы с большими данными»
Знания здесь более систематизированы, вопросы, связанные с машинным обучением и большими данными, мы обсудим в сессии вопросов и ответов курса.